我有一些如下代码:
<html>
<body>
<div id="product_descriptioncontent">
<input type="text" id="a" />
<textarea id="b" />
</div>
</body>
<html>
这意味着,我的 div 包含输入、文本区域或图像。但我的问题是如何检测 div 中任何子值发生变化时的变化?
我有一些如下代码:
<html>
<body>
<div id="product_descriptioncontent">
<input type="text" id="a" />
<textarea id="b" />
</div>
</body>
<html>
这意味着,我的 div 包含输入、文本区域或图像。但我的问题是如何检测 div 中任何子值发生变化时的变化?
该onchange
事件仅在元素失去焦点时触发,也就是说,当它blur
的 s 与value
它获得时不同focus
。
我不知道有任何本地侦听器会实时提供此类功能,但您可以尝试使用 jQuery 的.data()
方法来存储当前值并在标准键盘事件中对其进行检查,例如keyup
:
$('#product_descriptioncontent').children().each(function() {
$(this).on('keyup', function() {
if ($(this).data('c_val') != $(this).val()) {
alert('value changed!');
//do other stuff
}
$(this).data('c_val', $(this).val());
}).data('c_val', $(this).val());
});
请注意,您还可以将 重新映射keyup
到多个事件以进行额外检查:
$(this).on('keyup mouseup blur', function(){
如果您需要在没有用户输入任何内容的情况下调用它,那么简单地调用$('#element').keyup()
将触发该元素的函数。on
=]
You can do something like this:
$('#a, #b').on('change', function() {
$('#product_descriptioncontent').css('border', '1px solid green')
});
您也可以通过input
为子元素绑定 HTML5 事件来实现。这对于低于 9 的 IE 版本不起作用,但在这些情况下,您可以使用该propertychange
事件。下面的代码两者都做,因为 IE9 可以处理两者,我们propertychange
在 IE9 的情况下取消绑定事件,因为更好地使用标准input
事件。
$(document).ready(function() {
var propertyChangeUnbound = false;
$("#product_descriptioncontent").children().bind("propertychange", function(e) {
if (e.originalEvent.propertyName == "value") {
alert("Value changed!");
//do other stuff
}
});
$("#product_descriptioncontent").children().bind("input", function() {
if (!propertyChangeUnbound) {
$("#product_descriptioncontent").unbind("propertychange");
propertyChangeUnbound = true;
}
alert("Value changed!");
//do other stuff
});
});
这是一个 jsfiddle 链接:http: //jsfiddle.net/yNxaW/
这部分是基于对另一个 stackoverflow 问题的回答:仅捕获更改输入的按键?
You can add an onchange
event listener.
<html>
<body>
<div id="product_descriptioncontent">
<input onchange="somefunction(this)" type="text" id="a" />
<textarea onchange="somefunction(this)" id="b" />
</div>
</body>
<html>