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

发布于 2024-12-05 13:42:25 字数 250 浏览 0 评论 0原文

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

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

EDIT

什么是一个好的案例要这样做吗?

I saw this code and I'm not clear what the '!' does in this line of jQuery code on the return on the jQuery object:

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

EDIT

What is a good case to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧情勿念 2024-12-12 13:42:25

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

但是,由于 appendTo 的结果始终是 jQuery 对象,并且对象(无论是否为 jQuery)始终为 true,因此 !$('#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. bind() 文档(click( 的别名) ))
  2. preventDefault()
  3. stopPropagation() 的文档

It converts the result of $('#select2 option:selected').appendTo('#select1') to a boolean, and negates it.

However, as the result of appendTo is always a jQuery object, and an object (jQuery or not) is always truthy, the result of !$('#select2 option:selected').appendTo('#select1') is always false.

So what we have is effectively:

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

    return false;
});

Returning false in a jQuery event handler will stop the default event action occuring (e.g. the submission of a form/ navigation of a hyperlink) and stop the event propagating any further up the DOM tree.

So what we have is effectively:

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

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

Using return false instead of e.preventDefault(); e.stopPropagation(); is OK, but using the return !$(..) as a shortcut for the first example is ridiculous, and there is no need to do it.

Just to reiterate my point, the most important thing to note here is that there is never, ever a good reason/ case to do this.

Links:

  1. Docs for bind() (alias for click())
  2. Docs for preventDefault()
  3. Docs for stopPropagation()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文