2015-09-11 78 views
1

在按钮上点击,我想触发另一个正在做一些Ajax(后端逻辑)操作的div,点击按钮上的,然后触发实际点击onclick做功能,然后点击

我曾尝试没有成功

$('#button').click(function(event) { 
     $("#someDiv").click(); //at this point the ajax content will load.. 
     return true; 
}); 
+0

为什么不更新的ajaxLoaded的值,并触发点击只是在你的函数中做ajax? – Zl3n

+0

你可以试试'$(“#someDiv”).trigger(“click”);'看看它是否有帮助 – silkAdmin

+1

你是否希望启动ajax请求,然后立即处理原始按钮点击?或者是否希望延迟处理原始点击处理程序的其余部分,直到ajax请求成功完成并返回响应为止?如果前者,你的代码应该工作,我想。如果是后者,则需要重写原始的单击处理程序,将其逻辑的其余部分作为回调传递给ajax请求。 –

回答

0

以下尝试这样做。的。单击是。对(点击),听者的快捷方式,而不是触发:

$('#button').click(function(event) { 
     $("#someDiv").trigger("click"); //at this point the ajax content will load.. 
     return true; 
}); 
+0

你错了。 ['click()'](https://api.jquery.com/click/)也可以用来触发点击。请参阅文档:“*此方法是前两个变体中的.on(”click“,处理程序)的快捷方式,第三个**中的**和.trigger(”click“)。*” – D4V1D

+0

对。如果这对OP不起作用,我删除答案 – Del

+0

@删除代码实际上与OP相同.. – Hacketo

1

你可以使用一个布尔值来保存的状态,并开枪#button点击两次,执行实际点击仅ajax已被加载。 您也可以在发出ajax请求时禁用该按钮。

var ajaxLoaded = false; 

$('#button').click(function(event) { 
    if (!ajaxLoaded){ 
     $('#button').prop('disabled', true); 
     $("#someDiv").click(); 
     return false; 
    } 
    ajaxLoaded = false; 
    $('#button').prop('disabled', false); 
    return true; 
}); 

而且在Ajax请求的成功回调,

ajaxLoaded = true; 
$('#button').click(); 

Fiddle Example(使用setTimeout的模拟一些异步延迟)

+0

我只是注意到,点击事件将始终首先在ajax调用之前,我尝试了很多方法,但你的方式是目前为止的唯一方法.http://jsfiddle.net/50y212L4/4/ – guradio

+0

在你的小提琴中,'alert'请阻止请求/成功回调。并且,由于警报与监听器处于同一堆栈,因此当警报关闭时,它将继续执行,而不是先调用成功回调 – Hacketo

+0

是的,您是对的我认为如果您先将它放好,那么我将首先执行的是我的错误..我今天学到了一些东西。在ajax调用之前警报将首先关闭。我认为这不是我唯一的例外吗? – guradio