我試圖在Dajaxice/Dajax正在處理時阻止使用按鈕。我需要保證,如果在Dajax完成之前需要很長時間才能完成第二次Dajaxice onclick調用。如何在調用Dajaxice之前運行jQuery來禁用onclick?目前的解決方案很難看
我檢查了Dajax/Dajaxice readthedocs,stackoverflow和google找不到解決方案。於是我開始黑客....
我開始在一個基本的按鈕使用Dajaxice可能是這樣的:
<button id="btn" onclick="Dajaxice.example.myexample(Dajax.process);">
Click here!
</button>
但我想刪除onclick屬性值,而Dajax正在處理中。我第一次嘗試刪除的onclick的回調函數,但爲時已晚,在這一點上,因爲回調不會被調用,直到Dajaxice調用後:
<button id="btn" onclick="Dajaxice.example.myexample(my_js1_callback);">
Click here!
</button>
<script>
function my_js1_callback(data){
$("#wkbtn").attr('onclick', ""); /* Too Late */
Dajax.process(data);
}
</script>
的問題是,Dajaxice功能myexample中在onclick屬性值清除之前調用(因爲它需要或者它們不會調用)。我想在執行Dajaxice函數之前清除之前的。
在我的最新嘗試,我搬到了Dajaxice調用到了jQuery,而不是在onclick:
<button id="btn" onclick="my_dajaxice_myexample();">
Click here!
</button>
<script>
function my_js1_callback(data){
Dajax.process(data); /* process callback */
}
function my_dajaxice_myexample(){
$("#wkbtn").attr('onclick', ""); /* runs before Dajaxice */
$(function(){Dajaxice.example.myexample(my_js1_callback);})
}
</script>
它的工作原理,但似乎醜陋。看起來似乎有一個比這種腰帶和吊帶矯枉過正的方法更好的東西。
有什麼建議嗎?
編輯:基於VASH的答案更新:
<button id="btn">
Click here!
</button>
與jQuery/Dajaxice代碼:
<script>
$('#btn').click(function(){
$('#btn').attr("disabled", "disabled");
/* other pre-Dajaxice changes here */
Dajaxice.example.myexample(Dajax.process);
});
</script>
擴展此一點,我喜歡有取代「Dajax的可能性。過程「的用法與函數調用,以允許在此修訂的jQuery/Dajaxice代碼中運行Dajaxice調用JavaScript代碼:
<script>
function my_callback(data){
/* post-Dajaxice call, pre-Dajax execution changes here */
Dajax.process(data); /* process callback */
/* post-Dajax execution changes here */
}
$('#btn').click(function(){
$('#btn').attr("disabled", "disabled");
/* other pre-Dajaxice changes here */
Dajaxice.example.myexample(my_callback);
});
</script>
不幸的是,執行順序很重要。在FF中運行你的例子並打破這兩個文件。getElementBy和attr禁用行,getElement總是首先執行,這似乎表明Dajaxice會在按鈕被禁用之前執行。看來我可以移動getElement _into_ btn click函數,所以它必須在禁用btn後執行。 – ChrisFreeman
我的不好,我顯然沒有閱讀你所說的在Dajaxice()函數被調用之前需要清除按鈕**的部分。是的,你可以這樣做,只是爲了確保你的功能在按鈕被禁用後運行,你可以檢查屬性。這是一個更新的jsfiddle:http://jsfiddle.net/37VTL/1/(我會相應地更新我的答案;希望這是你所需要的) –
太好了!通過將兩個操作放在同一個函數中強制排序是我所需要的。我想我陷入了試圖通過onclick屬性中的Dajaxice調用來解決它的陷阱。我對你的回答做出的一個改變是*不*使用額外的if-disabled-check並依賴代碼我的推理是,如果這是一個遠程機會,代碼順序不起作用,那麼檢查是不會工作,或者由於if-disable阻止Dajaxice運行,*然後*該按鈕變爲禁用將導致與鎖定一個死鎖並沒有執行。 – ChrisFreeman