Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Jquery检测页面中控件的更改_Javascript_Jquery - Fatal编程技术网

Javascript 使用Jquery检测页面中控件的更改

Javascript 使用Jquery检测页面中控件的更改,javascript,jquery,Javascript,Jquery,我有一个页面,上面有大约20到30个基于查询字符串值的控件。我需要根据控件中的值更改将按钮更改为禁用。例如,在复选框列表中,如果选中或未选中某些内容,则添加或删除某些文本等。。。对于所有控件 控件包括文本框、选项按钮、复选框、选择控件和列表框 我不想向所有控件添加静态方法。我确实有一个想法,对所有控件进行后期绑定并附加事件。事件将在触发事件时禁用该按钮 是否有其他方法可以简单地实现此功能(如按键或使用事件属性窗口对象)?您可以使用事件委派并将事件绑定到父元素,然后将所有逻辑写入该事件处理程序中

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

控件包括文本框、选项按钮、复选框、选择控件和列表框

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


是否有其他方法可以简单地实现此功能(如按键或使用事件属性窗口对象)?

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

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

$("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
})

正如@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>

然而,如果您主要关心的是验证,那么您应该看看


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

这里我如何跟踪我的更改,例如,如果它的文本框,那么我如何知道它输入了新值或更改了现有值或删除了值。对于复选框,我如何知道该框是从选中变为未选中,还是从未选中变为选中。有没有办法跟踪活动更改前后的情况。是的。。您正在将处理程序绑定到
change
事件(请参见上面的代码)。每当复选框或无线电控件发生任何更改时,该事件都将触发。它也会在文本框中触发,但只有在文本框失去焦点后才会触发,所以我想你可以绑定到
按键
以及
更改单击
@Rui-请查看我对前面答案的评论。据我所知,如果你需要更改跟踪,你必须自己跟踪值。您可以使用jQuery的数据工具,这里有一个链接可以为您指明正确的方向:
$('#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);
    }
});