如何解决为什么$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;
});
它不起作用。
我究竟做错了什么?
解决方法
$(this).(\"input[type=checkbox]\")
是无效的代码-您正在使用parens来调用某些内容,但前面没有任何内容可以调用。您需要从jQuery格式的表单中调用ѭ5或.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;
} );
, 您需要一个方法名称。
您可以使用find()
[docs]方法,该方法搜索所有后代:
$(this).find(\"label\").show();
...或children()
[docs]方法,该方法仅搜索直接后代。
$(this).children(\"label\").show();
, 您的代码可能如下所示:
$(\'form\').live(\'submit\',function(){
if ($(this).find(\"input[type=checkbox]\").is(\':checked\')){
$(this).find(\"label\").show();
}else{
$(this).find(\"label\").hide();
}
return false;
});
, $(\"input[type=checkbox]\",this).is(\':checked\')
, 尝试这个:
$(\'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;
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。