Jquery не метод проблема с тегом кнопки - PullRequest
1 голос
/ 28 сентября 2011

я не знаю почему, но метод jquery not() возвращает одинаковое значение для двух разных тестов, которые являются эксклюзивными.

Посмотрите:

<script language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>

<script language="javascript">
    $(function() {
        $(':button, :submit').filter(function() {
            $('#result').append('tag = ' + $(this)[0].tagName + "<br />");
            $('#result').append('.not(\':submit\').length = ' + $(this).not(':submit').length + "<br />");
            $('#result').append('.not(\':button\').length = ' + $(this).not(':button').length + "<br />");
            $('#result').append('.is(\':button\') = ' + $(this).is(':button') + "<br /><br />");

        });

    });

</script>

<button>Btn1</button>
<input type="button" value="Btn2" />
<input type="submit" />

<div id="result">
</div>

Вот результаты:

tag = КНОПКА

.not (': submit'). Length = 0

.not (': button').length = 0

.is (': button') = true

tag = INPUT

.not (': submit'). length = 1

.not (': button'). Length = 0

.is (': button') = true

tag = INPUT

.not (': submit'). length = 0

.not (': button'). length = 1

.is (': button') = false

Нашли ошибку?

Ответы [ 3 ]

1 голос
/ 28 сентября 2011

Нет, это по замыслу. Для конкретного случая элемента button оба фильтра :submit и :button имеют значение true. button элементы имеют тип submit по умолчанию ( см. Документы MDN ).

0 голосов
/ 28 сентября 2011

Замените фильтр (function () {}) на каждый (function () {}), тогда вам может повезти.

0 голосов
/ 28 сентября 2011

Полагаю, вас смущает

.not(':submit').length = 0
.not(':button').length = 0

Ваше предположение неверно, ваши тесты не эксклюзив. Документация jQuery гласит:

:button: Выбирает все элементы кнопки и элементы type button.
:submit: Выбирает все элементы типа type submit.

Теперь, случается, что button элементы имеют атрибут type и значение по умолчанию submit.

type = submit | button | reset [CI]
Этот атрибут объявляет тип кнопки. Возможные значения:

  • submit: Создает кнопку отправки. Это значение по умолчанию.
  • сброс: создание кнопки сброса.
  • : создание кнопки.

Таким образом, jQuery возвращает правильные результаты. not(:button).length возвращает 0, потому что мы имеем дело с button элементами. not(:submit).length возвращает 0, поскольку этот элемент кнопки в виде атрибута type со значением submit.

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