为什么.next()给我'undefined'

时间:2011-05-31 07:06:30

标签: javascript jquery jquery-selectors

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

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

3 个答案:

答案 0 :(得分:5)

jQuery对象没有checked属性。

你可以......

(a)使用[0]get(0)订阅原生DOM元素。

(b)访问prop('checked')(&gt; =仅限jQuery 1.6。)

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

答案 1 :(得分:2)

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

只需将该行更改为以下内容即可

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

修正小提琴:http://jsfiddle.net/sD6JB/3/

答案 2 :(得分:1)

它是undefined因为,当您在click函数$(this)时,只有一个元素,您可以在其上定义click属性。所以集合中没有下一个兄弟。

<击>的说明:

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

<击>的解决方案:

$(this).siblings(“input”)。is(“:checked”)

顺便说一下,使用checked也是一个问题,但是你的初始未定义问题的原因如上所述。 请改用.is(":checked")