在this JSfiddle有两种形式。
重复两次
<form action="" method="post">
<input id="element" signed type="checkbox" checked>
<label for="element">x</label>
<button type="submit">Submit</button>
</form>
,JQuery看起来像这样
$('form').live('submit', function(){
if ($("input[type=checkbox]").is(':checked')){
$("label").show();
}else{
$("label").hide();
}
return false;
});
我不能使用ID来区分表单,所以我想这就是$(this)
。
如果删除了最后一个表单,它可以正常工作,但问题是如何在不使用ID的情况下使用它。
但是,如果我将代码更改为
$('form').live('submit', function(){
if ($(this).("input[type=checkbox]").is(':checked')){
$(this).("label").show();
}else{
$(this).("label").hide();
}
return false;
});
它不起作用。
我做错了什么?
答案 0 :(得分:6)
$(this).("input[type=checkbox]")
是无效的代码 - 你使用parens调用某些东西,但在它们前面没有任何东西可以调用。您需要从jQuery-ized表单中调用.find()
或.children()
:
$(this).find("input[type=checkbox]")
以下是精简版:
$( 'form' ).live( 'submit', function()
{
var $this = $( this );
$this.find( 'label' ).toggle( $this.find( 'input[type="checkbox"]' ).is( ':checked' ) );
return false;
} );
答案 1 :(得分:3)
您需要一个方法名称。
您可以使用find()
[docs]方法搜索所有后代:
$(this).find("label").show();
...或children()
[docs]方法,仅搜索直接后代。
$(this).children("label").show();
答案 2 :(得分:3)
您的代码可能如下所示:
$('form').live('submit', function(){
if ($(this).find("input[type=checkbox]").is(':checked')){
$(this).find("label").show();
}else{
$(this).find("label").hide();
}
return false;
});
答案 3 :(得分:1)
$("input[type=checkbox]", this).is(':checked')
答案 4 :(得分:1)
试试这个:
$('form').live('submit', function(){
// Cache "this" reference
var $this= $(this);
if ($this.find("input[type=checkbox]").is(':checked')){
$this.find("label").show();
}else{
$this.find("label").hide();
}
return false;
});