检测任何输入更改jquery

时间:2016-10-13 09:57:09

标签: jquery jquery-ui-dialog

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

如果用户更改了某个字段的值,我需要关闭所有打开的弹出窗口。

我尝试了但是它似乎没有工作(angular.module("md", []) .controller("crt", function ($scope) { $scope.txt = "text"; }) $(document).ready(function () { $("#btnJq").click(function () { var scope = angular.element($("#txtbox")).scope(); scope.txt = 'Changed'; scope.$apply(); }) }) 事件没有触发,我没有在控制台中得到“测试”:

change

知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

还有很多事情要做,但你是否意识到change只会触发场模糊?键入时不会触发。 此外,当您绑定处理程序时,元素可能不在那里。这可能是因为页面尚未加载或某些元素是异步加载的。之后动态添加的元素也不起作用。

要修复前者,请在尝试绑定事件处理程序之前确保页面已准备好

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

或者,您可以在父代上绑定处理程序

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

无论何时将元素添加到父元素,这都将起作用。请注意,这样做会较慢,因此请避免在bodywindow

等元素上使用它

答案 1 :(得分:1)

使用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="" />

答案 2 :(得分:0)

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

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

我知道你的解决方案是一个快捷方式,它应该可行,但我已经看到一些元素可以用来代替快捷方式。它与在何时加载脚本时创建元素有关。