Непонятно с этим синтаксисом jQuery: return! $ () - PullRequest
4 голосов
/ 22 сентября 2011

Я видел этот код, и мне не ясно, что '!' делает в этой строке кода jQuery при возврате объекта jQuery:

$('#remove').click(function() {
    return !$('#select2 option:selected').appendTo('#select1');
});

EDIT

Какой хороший случай, чтобы сделать это?

1 Ответ

6 голосов
/ 22 сентября 2011

Преобразует результат $('#select2 option:selected').appendTo('#select1') в логическое значение и отрицает его.

Однако в результате appendTo всегда является объектом jQuery, а объект (jQuery или нет) всегдана самом деле, результат !$('#select2 option:selected').appendTo('#select1') равен всегда ложно.

Таким образом, мы имеем:

$('#remove').click(function() {
    $('#select2 option:selected').appendTo('#select1');

    return false;
});

Возвращение false в обработчике событий jQueryостановить действие события по умолчанию (например, отправка формы / навигация по гиперссылке) и остановить событие, распространяющееся дальше по дереву DOM.

Итак, что мы имеем:

$('#remove').click(function(e) {
    $('#select2 option:selected').appendTo('#select1');

    e.preventDefault();
    e.stopPropagation();
});

Использование return false вместо e.preventDefault(); e.stopPropagation(); - это нормально, но использование return !$(..) в качестве ярлыка для первого примера смешно, и есть нет нужно это сделать.

Просто чтобы повторить мою точку зрения, самое важное, на что здесь следует обратить внимание, это то, что для этого никогда не бывает веской причины.

Ссылки:

  1. Документы для bind() (псевдоним для click())
  2. Документы для preventDefault()
  3. Документы для stopPropagation()
...