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();
});
每当我点击输入时,它会准确显示输入变为什么(如果我打开输入它会发出警告)
但每当我点击div / label时,它就会相反(当输入打开时它会提示错误)
有没有办法测试输入是否在两种情况下都打开和关闭而不是1?
[我假设发生这种情况的原因是因为一个是由jquery之前发生的浏览器触发的(即使我假设jquery应该首先发生,但无论如何),而在另一种情况下,jquery在触发器之前运行'检查',但似乎无法弄清楚如何在脚本之后延迟触发,或强制它在脚本之前运行。]
提前谢谢!
答案 0 :(得分:2)
您可以在复选框上监控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>
答案 1 :(得分:1)
试试这个:
$('div input').live('click',function(){
alert($(this).is(':checked'));
});
$('div').live('click,'function(e){
if(!$(e.target).is('input'))
$(this).find('input').triggerHandler("click");
});