检测jQuery函数所做的输入值更改

时间:2014-09-23 13:59:38

标签: jquery

所以我有一个函数可以改变隐藏输入字段的值,该字段发生在包含的.jsp中。

在父.jsp中我想检测对此值的更改,但它不起作用,但我尝试了。

参见jsfiddle的例子。

http://jsfiddle.net/3kxzvw5q/6/

$("input").change(function () {
    alert("input changed, calling registerChange");
    registerChange();
}); 

function registerChange(){
    $("#fieldsChangedIndicator").val('true');
}

$("#fieldsChangedIndicator").change(function() {
    alert("called");
});

我不希望在注册更改时立即执行操作的原因是因为我希望在父jsp中执行操作。

编辑:将jsFiddle更新为更具描述性的示例

4 个答案:

答案 0 :(得分:3)

概述

在回答我关于你问题的问题时,你说:

  

我正在尝试通过代码检测对值的更改。

发生这种情况时没有触发事件。您必须触发一个或轮询,或者不要担心更改,除非您必须(您的用例似乎不允许第三个选项)。

触发您自己的活动

如果您控制代码设置值,jQuery可以轻松触发和处理您自己的事件。设置值时:

$("#someField").val("newValue").trigger("code-change");

处理变更:

$("some relevant selector").on("code-change", function() {
    // Handle it here
});

虽然可以触发change事件(只需更改上面的名称),但如果处理事件的代码可能期望真正的最终用户事件,请注意意外后果。

(function() {
  "use strict";
  
  // Watch for 'change'
  $("input").on("change", function() {
    display("Saw 'change'");
  });
  
  // Watch for 'code-change'
  $("input").on("code-change", function() {
    display("Saw 'code-change'");
  });
  
  // Watch for either
  $("input").on("change code-change", function() {
    display("Saw either 'change' or 'code-change'");
  });
  
  // Change it on button press
  $("#btn-change").on("click", function() {
    var el = $("#theElement");
    var val = el.val();
    switch (val.length) {
        case 0:
          val = "some value";
          break;
        case 1:
          val = val + val;
          break;
        default:
          val = val.substring(1) + val.substring(0, 1);
          break;
    }
    el.val(val).trigger("code-change");
  });
  
  function display(msg) {
    $("<p>").html(String(msg)).appendTo(document.body);
  }
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p>Experiment with changing the value as a user (remember to leave the field), and with changing it using the button.</p>
<div><input id="theElement" value="Initial value" type="text"></div>
<div><input id="btn-change" type="button" value="Change It"></div>

轮询

如果您正在处理代码,而您无法控制设置值,则“主动”通知的唯一真正替代方法是轮询(blech)。请注意,轮询每个(比方说)100毫秒可以提供合理的响应速度而不需要很多开销,除非你检查一个真正的巨大的数量的字段(这会引起用户如何处理的问题)成千上万的表单字段。)

答案 1 :(得分:0)

试试这个:

$("input").on('input', registerChange); 

function registerChange(){
   $("#fieldsChangedIndicator").val('true');
}

答案 2 :(得分:0)

可以使用那个简单的代码

$(“input”)。change(function(){

alert("change input");

$( “#fieldsChangedIndicator”)VAL( '真');

registerChange();

}); 函数registerChange(){

alert("change #fieldsChangedIndicator");

}

或测试那个linke http://jsfiddle.net/3kxzvw5q/7/

答案 3 :(得分:-1)

$("#fieldsChangedIndicator").change(function() {
    alert("called");
}
);

你还没有关闭小提琴中的改变功能:P