函数返回后仍然运行

当用户单击button时,我将添加一个颜色select器到我的Electron应用程序中.click .click()触发我的函数,该函数关注input(隐藏的opacity: 0; height: 0px; width: 0px; ),作为用户点击( .blur() )时获取光标位置的颜色的代理。 然后它将该颜色放在另一个input字段中并返回。 但是,如果用户再次单击返回的input字段,然后单击, .blur()仍然会触发。 为什么是这个,我该如何防止呢?

 <input class="clickProxy" style="opacity: 0; height: 0px; width: 0px;" /> $('.color_picker').click(function(){ getColorAtPointer(); }); function getColorAtPointer(){ $('input[name="colorSample"]').focus(); $('input[name="colorSample"]').blur(function(){ var mouse = robot.getMousePos(); $('input[name="colorSample"]').val('#'+robot.getPixelColor(mouse.x, mouse.y)); return; }); } 

谢谢!

用户单击颜色select器后,您将绑定模糊事件。 您永远不会解除绑定,因此每次用户离开colorSample元素时都会继续触发。 你有几个select。

在我看来,最好的是使用.one来代替模糊,所以事件只会触发一次。

例如:

 function getColorAtPointer(){ $('input[name="colorSample"]').focus(); $('input[name="colorSample"]').one("blur", function(){ var mouse = robot.getMousePos(); $('input[name="colorSample"]').val('#'+robot.getPixelColor(mouse.x, mouse.y)); return; }); } 

或者,你可以命名空间模糊事件(例如.on("blur.color-picked")然后在模糊事件处理程序中解除事件(例如.off("blur.color-picked")

同样值得一提的是,您不必在点击事件中使用匿名函数,您可以直接传递函数

 $('.color_picker').click(getColorAtPointer);