【问题标题】:Detect the changes of the controls in a page using Jquery使用Jquery检测页面中控件的变化
【发布时间】:2014-03-03 11:54:09
【问题描述】:

根据查询字符串值,我的页面包含大约 20 到 30 个控件。我需要根据控件中的值更改将按钮更改为禁用。例如,在复选框列表中是否选中或取消选中某些内容,添加或删除某些文本等...对于所有控件。

控件是文本框、选项按钮、复选框、选择控件和列表框。

我不想为所有控件添加静态方法。我确实有一个想法,即对所有控件进行后期绑定并附加事件。每当事件被触发时,该事件将禁用按钮。

有没有其他方法可以以简单的方式完成此功能(如 Keypress 或使用事件属性窗口对象)?

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    正如@ekhaled 指出的,您可以使用相同的处理程序来处理所有单击和更改事件。 这是一个有点复杂的例子:

    <div id="container">
        <input id="input1" type="text" value="" />
        <select>
            <option value="1">ABC</option>
            <option value="2">EFG</option>
        </select>
        <input type="button" value="Submit" />
    </div>
    

    和它的javascript:

    $('#container').on("change click", ":input", function (event) {
        if (event.target.nodeName == "SELECT") {
            if ($(event.target).val() == "2") {
                console.log("disable");
                $(":button").prop("disabled", true);
            } else {
                $(":button").prop("disabled", false);
                console.log("enable");
            }
        }
    
        if (event.target.id == "input1" && $(event.target).val() == "") {
            $(":button").prop("disabled", true);
        }
    });
    

    See it working here.

    但是,如果您主要关心的是验证,则应该查看 jquery validation

    使用 jQuery 验证,您可以为构成整个表单验证的每个输入设置特定规则。它是非常可定制的,您可以更改错误的显示位置和方式,何时触发验证等。

    【讨论】:

    • @Rui- 请在之前的答案中查看我的 cmets。
    • 据我所知,如果您需要更改跟踪,则必须自己跟踪值。您可以使用 jQuery 的数据工具,这里有一个链接可以为您指明正确的方向:stackoverflow.com/questions/1159046/…
    【解决方案2】:

    您可以使用事件委托并将您的事件绑定到父元素,然后在该事件处理程序中编写所有逻辑。

    无法真正向您展示太多,因为您没有包含任何示例或代码。但大致如下:

    $("body").on('change click', 'input, select', function(){
       var _this = $(this);
       if(_this.is('input[type=checkbox].className')){
         //follow one logic
       }
       if(_this.is('input[type=radio].className')){
         //follow another logic
       }
       //etc, etc
    })
    

    【讨论】:

    • 在这里我如何跟踪我的更改,例如,如果它的文本框,那么我怎么知道它已经输入了新值或更改了现有值或删除了值。对于复选框,我怎么知道该框是从选中变为未选中还是未选中变为选中。有没有办法在事件变化之前和之后进行跟踪。
    • yes.. 您将处理程序绑定到 change 事件(请参阅上面的代码)。每当复选框或无线电控件发生任何变化时,都会触发该事件。它也会在文本框中触发,但只有在文本框失去焦点后才会触发,所以我想你可以绑定到 keydown 以及 change click
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多