检测任何输入变化 jquery

Detect any input change jquery

我有一个包含多个字段和一些 jquery 模态对话框(弹出窗口)的表单。

如果其中一个字段的值已被用户更改,我需要关闭所有打开的弹出窗口。

我试过了,但它似乎不起作用(change 事件没有触发,我在控制台中没有得到 "test"):

   $("input[type='text']").change(function () {
       console.log("test");
       $(".ui-dialog-content").dialog("close");
    });

知道如何解决吗?

这只是一个随机猜测,但你试过了吗:

$("input[type='text']”).on('change', function () {
    console.log("test");
    $(".ui-dialog-content").dialog("close");
});

我知道您的解决方案是解决此问题的捷径,它应该可以工作,但我看到了一些可以使用此解决方案而不是捷径的元素。它与元素的创建时间和脚本的加载时间有关。

当您使用 autoOpen false 时有效

$("#dialog-1").dialog({
                      autoOpen: false, // autoOpen to false
                  });

脚本:

$(function () {
              $("#dialog-1").dialog({
                  autoOpen: false, // autoOpen to false
              });
              $("#dialog-2").dialog({
                  autoOpen: false, 
              });
              $("#opener").click(function () {
                  $("#dialog-1").dialog("open");
              });
              $("#opener2").click(function () {
                  $("#dialog-2").dialog("open");
              });
              $("input[type='text']").change(function () { // input changes
                  console.log("test");
                  $(".ui-dialog-content").dialog("close");
              });
          });

HTML:

<div id="dialog-1" title="Dialog Title goes here...">This my first jQuery UI Dialog1!</div>
       <div id="dialog-2" title="Dialog Title goes here...">This my first jQuery UI Dialog2!</div>
      <button id="opener">Open Dialog</button>
       <button id="opener2">Open Dialog</button>
       <input type="text" id="txt" value="" />

没什么可继续的,但是您知道 change 只在场模糊时触发吗?它不会在您键入时触发。 此外,当您绑定处理程序时,元素可能不存在。这可能是因为页面尚未加载,或者某些元素是异步加载的。之后动态添加的元素也不起作用。

要修复前者,请确保您的页面已准备就绪,然后再尝试绑定事件处理程序

$(function() {
  // safe here
});

或者,您可以将处理程序绑定到父级上

$("#parent").on("change", "input[type='text']", function () {
   console.log("test");
});

无论何时将元素添加到父级,这都将起作用。请注意,这会比较慢,因此请避免在顶级元素(例如 bodywindow

上使用它