2015-09-11 121 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