小编Chr*_*son的帖子

$(this)OR event.target OR var input = $(this)

jQuery目前为我提供了一个有趣的Javascript介绍,经过12年的幸福生活没有.我正处于试图尽可能多地学习优化我编写的代码的阶段,虽然我已经找到了很多很好的参考资料,但有一些非常基本的东西令我感到困惑,我一直无法在任何地方找到它的任何东西.

当我将元素附加到元素时,我应该如何在函数中引用该元素.例如,将函数附加到元素的click事件时:

$('#a_button',$('#a_list_of_buttons')).click(function() {
    // NOW WHAT'S THE BEST WAY TO REFER TO '#a_button' ?
});
Run Code Online (Sandbox Code Playgroud)

我知道不要继续重新选择它,因为浏览器必须从头开始再次搜索整个DOM以找到它曾经发现过的内容:

$('#a_button').click(function() {
    // I KNOW THAT THIS IS NAUGHTY
    var buttonValue = $('#a_button').val();
    $('#a_button').addClass('button_has_been_clicked');

});
Run Code Online (Sandbox Code Playgroud)

目前我正在使用以下任何一种,但我不完全确定每个人实际在做什么:

$('#a_button').click(function() {
    // USING this
    var buttonValue = $(this).val();
    $(this).addClass('button_has_been_clicked');
});
Run Code Online (Sandbox Code Playgroud)

但这只是在第一个"顽皮"的例子中重新选择吗?

$('#a_button').click(function(event) {
    // USING event.target
    var buttonValue = $(event.target).val();
    $(event.target).addClass('button_has_been_clicked');
});
Run Code Online (Sandbox Code Playgroud)

这似乎可能更好,但多次引用'event.target'是否有效?

$('#a_button').click(function(event) {
    // USING A LOCAL VARIABLE
    var thisButton = $(this);

    // OR SHOULD THAT BE
    var thisButton = $(event.target);

    var buttonValue = …
Run Code Online (Sandbox Code Playgroud)

javascript optimization jquery

7
推荐指数
2
解决办法
3883
查看次数

有没有办法在初始悬停触发点击后"重置"移动Webkit的伪悬停行为?

我正在一个网站上,我正在使用Javascript(通过JQuery)添加包含列表中项目的额外信息的弹出框.我正在使用JQuery mouseenetermouseleave事件来使弹出窗口显示和消失,这当然在桌面浏览器中都可以正常工作.

在Mobile Safari中,当我点击一个项目时出现弹出窗口(这是我期望的和我想要发生的事情),并且我添加了一个ontouchstart触发mouseleaveJQuery事件的内容,从而在用户执行任何其他操作时隐藏任何可见的弹出窗口.除了当用户点击他们刚看过并取消的弹出窗口(通过滚动或通过执行任何其他触发ontouchstart事件的事件)而不是再次显示弹出窗口时,这也可以正常工作它会激活附加到该项目的链接.

如果用户点击另一个项目而不是再次点击相同的项目,那么该新项目的弹出窗口将显示,然后如果他们再次点击第一个项目,则该项目的弹出窗口将显示.同样,这既是预期的,也是我想要发生的事情.

似乎一旦有一个悬停事件的项目被点击并且Mobile Safari被迫发生该事件,那么该项目将被标记为已触发其悬停事件,因此下一个点击不必假装是一个悬停,它可以是正常的点击.使用悬停事件点击另一个项目似乎"重置"为前一个项目设置的标志.

我希望能够为自己'重置'这个标志,以便当前点击项目显示弹出窗口以及下一次点击该项目时,即使弹出窗口已关闭, ,当我用我的关闭弹出窗口时,会激活链接,ontouchstart因此我认为该项目不再"悬停",再次点击同一项目应再次显示弹出窗口然后仅显示点击该项目,同时弹出窗口可见链接激活.

当我使用ontouchstart触发器时,秘密似乎是让Mobile Safari退出其"伪悬停"模式,mouseleave但是当Mobile Safari假装悬停在任何东西上时,我无法在任何地方找到任何有用的信息.这可以通过Javascript事件访问.

我知道我可以编写一个弹出代码版本专门用于Mobile Safari,但是让浏览器完成模仿悬停事件的大部分工作似乎更有效率.如果只有我可以得到这个最后的小niggle整理出来.

javascript touchscreen mobile-safari javascript-events

5
推荐指数
1
解决办法
813
查看次数