почему .next () дает мне 'undefined' - PullRequest
2 голосов
/ 31 мая 2011

почему .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 ]

5 голосов
/ 31 мая 2011

Объект jQuery не имеет свойства checked.

Вы можете либо ...

(a) Подпишите собственный элемент DOM с помощью [0] или get(0).

(b) Доступ prop('checked') (> = только jQuery 1.6.)

(c) Использовать is(':checked').

2 голосов
/ 31 мая 2011

Это потому, что вы вызываете .checked для объекта jQuery, а не для элемента DOM.Если вы хотите вызвать .checked, вам нужно извлечь элемент DOM из коллекции jQuery.

Простое изменение этой строки на приведенное ниже будет работать

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

Фиксированная скрипка: http://jsfiddle.net/sD6JB/3/

1 голос
/ 31 мая 2011

Это undefined, потому что, когда вы находитесь в функции click, в наборе $(this) содержится только один элемент, для которого вы определяете свойство click. Так что в наборе нет следующего брата.

Пояснение:

$('button[type=button]') содержит все элементы button с атрибутом type=button. Когда вы определяете обработчик кликов на них, вы создаете для каждого из них функцию, и в этой функции this будет элементом, для которого вы определяете обработчик событий. Когда вы используете $(this), вы создаете набор оберток jQuery, который содержит только этот элемент. .next() используется для выбора следующего брата в наборе, но в вашем наборе есть только один элемент.

Решение:

$ (this) .siblings ("input"). Is (": флажок")

Кстати, использование флажка - тоже проблема, но причина вашей первоначальной неопределенной проблемы - выше. Вместо этого используйте .is(":checked").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...