我有一些代码如下:
<html>
<body>
<div id="product_descriptioncontent">
<input type="text" id="a" />
<textarea id="b" />
</div>
</body>
<html>
这意味着,我的div包含输入,文本区域或图像。但我的问题是如何在div中改变任何子值时检测更改?
答案 0 :(得分:3)
您可以这样做:
$('#a, #b').on('change', function() {
$('#product_descriptioncontent').css('border', '1px solid green')
});
答案 1 :(得分:3)
onchange
事件仅在元素失去焦点时触发,即blur
时value
与获得focus
时的keyup
不同。
我不知道任何可以实时提供此类功能的本机监听器,但您可以尝试操纵jQuery的.data()
方法来存储当前值并在标准键盘事件中检查它,例如$('#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
将触发该元素的{{1}}函数。 =]
答案 2 :(得分:1)
您也可以通过绑定子元素的HTML5 input
事件来完成此操作。这对于小于9的IE版本不起作用,但在这些情况下,您可以使用propertychange
事件。下面的代码同时执行,因为IE9可以处理两者,我们在IE9的情况下取消绑定propertychange
事件,因为更好地使用标准的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问题的答案:Catch only keypresses that change input?
答案 3 :(得分:0)
您可以添加onchange
事件监听器。
<html>
<body>
<div id="product_descriptioncontent">
<input onchange="somefunction(this)" type="text" id="a" />
<textarea onchange="somefunction(this)" id="b" />
</div>
</body>
<html>