为什么$(这个)不在这里工作?

时间:2011-06-14 13:00:12

标签: javascript jquery

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;
});

它不起作用。

我做错了什么?

5 个答案:

答案 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;
});