我已经看到将change
事件附加到各种类型的元素的多种变体,但是还没有看到选择一种风格而不是另一种风格的任何逻辑原因。
在当前项目中,我使用$(..).change(...)
模式将处理程序附加到我选择的每个元素。我注意到在大约15k-20k捕获的对象之后,处理程序似乎有一个明显的滞后时间(大约400-600毫秒)。
是否有更有效的方法将事件附加到多个元素,同时最小化明显的滞后差异?
考虑将“评估逻辑”提取到独立功能中,但不确定是否会有任何实际收益。
{{#if rows.length}}
<tbody>
{{#each rows}}
<tr id="rowId_{{Id}}">
<td>{{DateHour}}</td>
<td>
<input id="hid_{{Id}}" type="hidden" value="{{Value}}" />
<input id="txt_{{Id}}" type="text" name="name" value="{{Value}}" />
</td>
<td>{{Value2}}</td>
<td>{{Value3}}</td>
<td>{{Value4}}</td>
<td>{{Value5}}</td>
<td>{{Value6}}</td>
<td>{{Value7}}</td>
<td>{{Value8}}</td>
<td>{{Value9}}</td>
<td>{{Value10}}</td>
</tr>
{{/each}}
</tbody>
{{/if}}
$('[id^="txt"]').change(function (evt) {
// Capture the Source Elements
var src = evt.currentTarget
// Capture all controls with the same [ID] suffix to their ID attribute, then capture the Hidden Element
// of that group. The Hidden Element is the Original Value
var orig = $('[id$=' + src.id.split('_')[1] + ']').filter('[id^=hid]').val();
var mod = $(src).val();
if (mod != orig) {
// Original Value was modified
$(src).addClass('modified');
} else {
$(src).removeClass('modified');
}
});
有更好的方法吗?