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

时间:2011-09-21 21:04:46

标签: boolean-logic logical-operators jquery

我看到了这段代码,我不清楚jQuery对象返回时这行jQuery代码中'!'的作用:

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

修改

这样做有什么好处?

1 个答案:

答案 0 :(得分:6)

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

但是,由于appendTo始终是jQuery对象,而对象(jQuery与否)始终是真实的,!$('#select2 option:selected').appendTo('#select1')的结果总是为false

所以我们有效的是:

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

    return false;
});

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

所以我们有效的是:

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

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

使用return false代替e.preventDefault(); e.stopPropagation();即可,但使用return !$(..)作为第一个示例的快捷方式是荒谬的,并且 没有 需要这样做。

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

链接:

  1. Docs for bind()click()的别名)
  2. Docs for preventDefault()
  3. Docs for stopPropagation()