您可以利用表單域的defaultValue
和defaultSelected
屬性。首先,找到所有那些defaultValue
從value
不同的輸入:
var changedFields = $("input[id*=mid]").filter(function() {
return this.defaultValue != this.value;
});
然後,找到所有的列表框,其defaultSelected
從當前選擇的區別:
changedFields.add($("select[id*=mse_]").filter(function() {
return !this.options[this.selectedIndex].defaultSelected;
}));
注意的是,如果沒有<option>
有selected
屬性,所有選項都將具有defaultSelected
爲假。你可以解決的一個方法是找到默認選項。默認選項是0123'爲真的最後一個選項,如果沒有選項,則默認選項將是第一個選項。
changedFields.add($("select[id*=mse_]").filter(function() {
var defaultOption = $("option", this).filter(function() {
return this.defaultSelected;
});
defaultOption = defaultOption.length ? defaultOption.last()[0] : this.options[0];
return this.options[this.selectedIndex] != defaultOption;
}));
然後,找到自己的父行:
var changedRows = changedFields.closest("tr");
然後,使用.map()
得到行排索引數組:現在
var changedRowIndexes = changedRows.map(function() {
return $(this).index();
}).get();
,changedRowIndexes
是數字數組用一個已經改變的輸入元素來指示每一行的索引。
您發送更改到服務器之後,它可能是一個好主意,更新您輸入的defaultValue
:
changedFields.filter("input").each(function() {
this.defaultValue = this.value;
});
changedFields.filter("select").each(function() {
$("option", this).each(function() {
this.defaultSelected = false;
});
this.options[this.selectedIndex].defaultSelected = true;
});
我似乎最近推薦連載()很多... – Dave 2012-02-23 18:59:06