如何在Jquery中单击()后调用一个动作?

rog*_*iog 42 javascript jquery

我想在单击某个DOM元素后加载图像和其他一些操作,但我想在点击操作完成后加载它们.

这是一个代码示例:

 $("#message_link").click(function(){
   if (some_conditions...){
       $("#header").append("<div><img alt=\"Loader\"src=\"/images/ajax-loader.gif\"  /></div>");
   }
 });
Run Code Online (Sandbox Code Playgroud)

问题是if条件在单击操作完成之前执行(或者至少这是我的印象).我需要在单击操作完成后执行If条件.有人可以告诉我一个解决方案吗?

谢谢 :)

Jam*_*ice 39

如果我已正确理解您的问题,那么您正在寻找mouseup事件,而不是click事件:

$("#message_link").mouseup(function() {
    //Do stuff here
});
Run Code Online (Sandbox Code Playgroud)

mouseup事件触发时,释放鼠标按钮,将鼠标按钮是否被按下元素上不考虑,而click考虑到这两个mousedownmouseup.

但是,click应该可以正常工作,因为在释放鼠标按钮之前它实际上不会触发.


Kev*_*ker 39

setTimeout 可能会帮到这里

$("#message_link").click(function(){
   setTimeout(function() {
       if (some_conditions...){
           $("#header").append("<div><img alt=\"Loader\"src=\"/images/ajax-loader.gif\"  /></div>");
       }
   }, 100);
});
Run Code Online (Sandbox Code Playgroud)

如果满足some_conditions,那将导致在click事件发生后~100ms附加div.

  • 这是一个黑客,但我能找到的唯一方法 (4认同)

hrn*_*sky 5

您可以在链等元素上编写事件,

$(element).on('click',function(){
   //action on click
}).on('mouseup',function(){
   //action on mouseup (just before click event)
});
Run Code Online (Sandbox Code Playgroud)

我用它来删除购物车项目。同一个对象,做一些动作,一个动作之后