2011-05-31 76 views
2

为什么.next()返回'undefined'? http://jsfiddle.net/radek/sD6JB/2/为什么.next()给我'undefined'

HTML

<button value="login|basic" class="square_button button_background" type="button"> run </button> 
<input name="restore" title="restore before ant run" type="checkbox"> 

<button value="test|advanced" class="square_button button_background" type="button"> run </button> 
<input name="restore" title="restore before ant run" type="checkbox"> 

<button value="best|4444" class="square_button button_background" type="button"> run </button> 
<input name="restore" title="restore before ant run" type="checkbox"> 

<div id='results'/> 

的JavaScript + jQuery的

$(document).ready(function(){ 
    $('button[type=button]').click(function(){ 
     var params = $(this).val(); 
     document.getElementById("results").innerHTML+= 
      "<BR>"+params.split('|')[0]+" - " 
      + params.split('|')[1]+" - " 
      + $(this).next().checked; 
    }); 
}); 
+1

为什么你甚至首先有'

+0

“按钮_按钮。”大声笑! – sscirrus 2011-05-31 07:11:52

+0

@BoltClock'button'的默认'type'属性是'submit'。 [来源](http://www.w3.org/TR/html401/interact/forms.html#h-17.5)。 – alex 2011-05-31 07:15:23

回答

5

甲jQuery对象没有checked属性。

您可以...

(一)与标或[0]get(0)本地DOM元素。

(b)获取prop('checked')(> =仅jQuery的1.6。)

(c)利用is(':checked')

+0

现在工作正常。谢谢 – Radek 2011-05-31 07:13:52

+0

注意.prop是只能从jQuery 1.6得到的 – Radek 2011-06-02 00:35:46

2

这是因为您在jQuery对象上调用.checked而不是DOM元素。如果您想调用.checked,则需要从jQuery集合中获取DOM元素。

简单地改变该行对下面将工作

$(this).next().get(0).checked 

固定小提琴:http://jsfiddle.net/sD6JB/3/

+0

不错的解释,谢谢 – Radek 2011-05-31 07:13:17

1

这是 undefined因为,当你在 click功能 $(this)只设置保存一个元件的其你定义了 click属性。所以这个组里没有下一个兄弟姐妹。

说明:

$('button[type=button]')包含所有 button元件与 type=button属性。 当你为它们定义clickhandler时,你为它们创建一个函数,并且在那个函数中 this将是你定义事件处理函数的元素。 当您使用 $(this)时,您将创建一个仅包含此元素的jQuery包装器集。 .next()用于选择集合中的下一个兄弟,但您的集合只有一个元素。

解决方案:

$(本).siblings( “输入”)为( “:勾选”)

顺便说一句,使用检查也是一个问题,但你最初的未定义问题的原因就在上面。 改为使用.is(":checked")

+0

我不明白这个答案:-) – Radek 2011-05-31 07:11:10

+0

我在一秒解释... – aorcsik 2011-05-31 07:12:02

+0

很好用,谢谢。现在我甚至明白你的意思了:-) – Radek 2011-05-31 07:22:12