多元素选择器:附加事件效率

时间:2017-11-15 16:15:30

标签: javascript jquery onchange

我已经看到将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');
    }
});

问题:

有更好的方法吗?

0 个答案:

没有答案