所以我有一个函数可以改变隐藏输入字段的值,该字段发生在包含的.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更新为更具描述性的示例
答案 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