我想对除特定元素之外的所有点击执行某些操作。我创建了一个非常简单的示例来演示该问题:http://jsfiddle.net/nhe6wk77/.我的代码:$('body').on('click',':not(a)',function(){//dostuff});我希望所有点击被忽略,但事实并非如此。是我做错了什么还是jQuery方面的错误? 最佳答案 代码中发生了很多不明显的事情。最重要的是,click事件实际上附加到body元素。由于该元素不是anchor,因此您将始终收到警报。(事件委托(delegate)有效是因为click事
阅读另一个关于jQuery性能的StackOverflow问题,我开始思考什么时候值得使用事件委托(delegate)而不是单独绑定(bind)到元素。我主要考虑的是jQuery,但我认为它可能适用于一般的Javascript。事件委托(delegate)有两个主要目的:允许处理程序处理尚未创建/插入到DOM中的元素。将一个函数绑定(bind)到一个共同的祖先元素而不是绑定(bind)到多个兄弟元素我的问题是关于其中的第二个。一般的答案可能是“这取决于具体情况”,但我想知道是否有经验法则或基准测试方法来对此进行测试。因此,问题是:在事件委托(delegate)的性能优势超过性能成本之前
经过几个小时的搜索,我的下面的代码有问题。事实上,我离我想的答案不远,但我仍然被封锁了……我有一个在循环内调用的匿名函数,我想访问和刷新全局变量,但我尝试使用window.myvariable和另一个函数,但没有任何反应......这是我的代码:for(vari=0;i那么,我如何才能转换这个匿名函数,以便获得我可以从我的代码中访问的东西?非常感谢,抱歉我的英语不是很好...... 最佳答案 这是异步代码执行的典型问题。您的示例代码不会从上到下执行。特别是,在Shapefile完成它正在做的任何事情之前,您的匿名函数不会被执行。同时
在vanillajs中进行事件委托(delegate)的最佳(最快/正确)方式是什么?例如,如果我在jQuery中有这个:$('#main').on('click','.focused',function(){settingsPanel();});我怎样才能将它翻译成vanillajs?也许用.addEventListener()我能想到的方法是:document.getElementById('main').addEventListener('click',dothis);functiondothis(){//nowinjQuery$(this).children().each(fu
我一直在我的控制台中看到这个非破坏性异常:UncaughtReferenceError:stopmeisnotdefined(匿名函数)在我的任何文件中都没有调用名为stopme的变量,在控制台中进行了全面搜索。我有多个:setInterval(function(){updateMetrics();},1000);调用我的代码,每当其中一个失败时,它就会显示在控制台中。我也不知道这是否是默认行为,但我也注意到每次我使用以下方法设置新间隔时:varintervalId=setInterval(function(){},1000);intervalId是非顺序的,如:console.log
在Viewremove()方法中调用undelegateEvents()是一种不好的做法吗?为什么Backbone人员默认不包含它?我意识到我在简单地重新初始化View变量时遇到了很多绑定(bind)问题。虽然在创建新View时会自动调用undelegateEvents(),但它会尝试取消委托(delegate)新实例化View的事件,而不是前一个View。因此,除非每次都手动调用它,否则幽灵事件回调仍然存在并搞砸了我的应用程序。处理此问题的最佳方法是什么? 最佳答案 Isitabadpracticetocallundelegate
我遇到一个问题,将图像src(使用newImage创建的图像)设置为base64编码图像失败,抛出:跨源资源共享策略拒绝跨源图像加载。我已经有了image.crossOrigin='Anonymous'。请参阅以下代码笔:http://codepen.io/bedeoverend/pen/aORQzg.它适用于Chrome,但不适用于Safari。如果有效,黑白饼图图像应该显示在底部。为什么会发生这种情况,如何解决?更新:为了澄清,我在这里做了一个更集中的代码笔:http://codepen.io/bedeoverend/pen/BNGarr对于Safari,似乎在图像上设置cross
我正在尝试在用DataTables.Net插件包装的网格上使用委托(delegate)方法。我最初有这段代码,它按预期工作。$("#myGridtbodytr").click(function(){varid=$(this).children('td').eq(0).text();alert(id);});但是,如果我更改分页大小,则较新的行没有调用该函数的点击事件。我决定新的JQuery委托(delegate)方法应该完全符合我的要求;但是,它对任何tr元素什么都不做。谁能解释为什么这不起作用:$('#myGridtbody').delegate('tr','click',funct
动态创建的dom元素上的事件委托(delegate)的native实现是什么?我尝试查看jQuery源代码,但无法遵循.on方法。注意:目前,我在创建dom元素后附加事件处理程序,这看起来很标准,但我喜欢jQuery.on使用此语法处理动态创建的元素事件的方式$(文档).on("click",".selector",handler);. 最佳答案 基本上是这样的://$(document).on("click",,handler)document.addEventListener("click",function(e){for(va
与我一起工作的一位开发人员开始以这种方式编写他的所有代码:$('.toggles').delegate('input','click',function(){//dosomething});对比:$('.toggles').click(function(){//dosomething});这样做有什么性能优势吗? 最佳答案 delegate()从jQuery1.7开始被取代。改用.on()。.on()具有出色的性能基准。并涵盖您的.click()需求和需要 关于javascript-明智