0
  1. JQM 页面“操作员修改”。
  2. 在页面内形成“用户表单”。
  3. 表单内的一些控件(文本输入等)。

是否可以为这些控件注册一次事件处理程序?跟踪表单控件内部的任何更改会很棒。如果可能的话 - 怎么做?

下面的代码片段:

<div data-role="page" id="operator-modify" data-theme="b">

    <div data-role="content">

        <form id="user-form">
            <label for="user-id-name">ID:</label>
            <input type="text" name="user-id-name" id="user-id-m" data-clear-btn="true"/>
            <label for="user-title-name">Name:</label>
            <input type="text" name="user-title-name" id="user-title-m" data-clear-btn="true"/>
            <label for="user-role-name">Role:</label>
            <input type="text" name="user-role-name" id="user-role-m" data-clear-btn="true"/>
        </form>
    </div>
</div>

注册 3 个相同的事件处理程序并不难,但似乎不灵活的解决方案。

4

2 回答 2

2

您可以通过以下方式使用事件委托:

$("#user-form").on("click", 'input[type="text"]', function (e) {
    // `this` refers to the element that was clicked
    // `e.delegateTarget` refers to the element this event is actually bound to (the form)
});

演示:http: //jsfiddle.net/Nz6e8/

它绑定了一个click事件(到form[id="user-form"]元素),但只针对其中的input[type="text"]元素执行。

根据您想要将事件绑定到什么以及您想要定位什么,您可以更改选择器,但应该完成您想要的。

参考:

于 2013-04-19T19:39:28.310 回答
1

是的你可以。试试这个http://jsfiddle.net/UC952/

$('input[type="text"]', 'div[data-role="content"]').keydown(function () {
    console.log($('label[for="' + $(this).attr("name") + '"]', 'div[data-role="content"]').text() + ' changed.');
});

还有一个更通用的:-event.target将为您提供触发表单内事件的元素。

$('#user-form').keydown(function (event) {
   var elem = $(event.target);
    console.log($('label[for="' + elem.attr("name") + '"]', 'div[data-role="content"]').text() + ' changed.');
});
于 2013-04-19T19:40:08.887 回答