HTML:
<div>
<input>
<label>
</div>
JS:
$('div input').live('click',function(){
alert($(this).is(':checked'));
});
$('div').live('click,'function(e){
if(!$(e.target).is('input'))
$(this).find('input').click();
});
每当我点击输入时,它就会准确地显示输入变成了什么(如果我打开输入,它就会警告true)
但每当我单击div/label时,它就会做相反的事情(当输入打开时,它会警告false)
有没有一种方法可以测试输入在两种情况下都是打开和关闭的,而不是1?
我假设发生这种情况的原因是因为其中一个是由浏览器触发的,它发生在jquery之前(尽管我假设jquery应该首先发生,但不管怎样),在另一种情况下,jquery在'checked‘的触发器之前运行,但似乎不知道如何将触发器延迟到脚本之后,或者强制它在脚本之前运行。
提前感谢!
发布于 2011-09-27 11:15:55
您可以在复选框本身上监视change()
,然后单击DIV可以直接更改复选框中的值,然后触发change()
而不是click()
。
$('input[type="checkbox"]').live('change',function(){
alert($(this).is(':checked'));
});
$('div').live('click',function(e){
if(!$(e.target).is('input')) {
var $input = $(this).find('input');
$input.prop("checked", !$input.is(':checked')).change();
}
});
此外,如果您的目的是避免整个<label for="" />
的烦恼,请查看以下内容。
<label><input type="checkbox" value="awesome" /> Check it</label>
发布于 2011-09-27 11:18:40
试试这个:
$('div input').live('click',function(){
alert($(this).is(':checked'));
});
$('div').live('click,'function(e){
if(!$(e.target).is('input'))
$(this).find('input').triggerHandler("click");
});
https://stackoverflow.com/questions/7563709
复制相似问题