这个jQuery语法不清楚:return!$()

Mar*_*ark 4 jquery boolean-logic logical-operators

我看到了这段代码,我不清楚!jQuery对象返回的jQuery代码中的' '做了什么:

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

编辑

做这件事的好例子是什么?

Mat*_*att 6

它将结果转换$('#select2 option:selected').appendTo('#select1')为布尔值,并将其否定.

然而,作为结果的appendTo是总是一个jQuery对象,和对象(jQuery的或不)总是truthy,结果!$('#select2 option:selected').appendTo('#select1')总是假的.

所以我们有效的是:

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

    return false;
});
Run Code Online (Sandbox Code Playgroud)

false在jQuery事件处理程序中返回将停止发生的默认事件操作(例如,提交超链接的表单/导航)停止事件在DOM树中向上传播.

所以我们有效的是:

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

    e.preventDefault();
    e.stopPropagation();
});
Run Code Online (Sandbox Code Playgroud)

使用return false而不是e.preventDefault(); e.stopPropagation();OK,但使用return !$(..)第一个示例的快捷方式是荒谬的,并且没有必要这样做.

只是重申我的观点,这里要注意的最重要的事情是,从来没有一个很好的理由/案例可以做到这一点.

链接:

  1. 文件bind()(别名click())
  2. 文件 preventDefault()
  3. 文件 stopPropagation()