2011-08-26 58 views
0

我寫JavaScript和自定義按鈕PHP應用程序。問題是點擊按鈕時,無論是單擊「是」還是「取消」,它都在執行單擊「是」的默認功能。你能幫我找到錯誤嗎?的onclick行動適用於只有一個條件

PHP代碼是

<script type="text/javascript" language="javascript" src="javascript/access1.js"></script> 
<form name="form_delete" id="form_delete" action="" method="POST" class="access"> 
| 
| 
| 
<input type="hidden" name="deleteinstanceaction" value="1" /> 
</form> 
<a id="_delete_btt" class="button" onClick="confirmDelete()">Delete</a> 
<img class="ajaxload" style="display:none;" id="ajaxld" src="images/ajax-loader.gif"/> 

EDIT1 的JavaScript代碼是

function confirmDelete() { 
var agree=confirm("Are you sure you wish to continue? This will remove the selected item permamently!"); 
if (agree) 
return true ; 
else 
return false ; 
} 

該問題是否涉及到AJAX? 如果我使用正常的按鈕,那麼這個JavaScript工作正常,例如,在以下情況下能正常工作兩個「是」和「否」點擊.js文件

<input type="submit" name="delete_state" value="Delete selected state" onClick="confirmDelete()"> 

EDIT2 的代碼是:

$(document).ready(function() { 
Access.initEventHandlers(); }); 

    var Access = { 
    initEventHandlers : function(){ 
    if($('#_delete_btt')){ 
     $("#_delete_btt").click(function(e){ 
      Access.processSubmit(); 
     }); 
    } 
    processSubmit: function (event) { 
     $('#_delete_btt').hide(); 
     $('#ajaxld').show(); 
     setTimeout("Access.formsub()",500); 
    }, 
    formsub: function() { 
     var url = 'php/corecontroller.php?ts='+new Date().getTime(); 
     $.post(url, $('#form_delete').serialize(), Access.oncomplete,"json"); 
    }, 
    oncecomplete:function(data,textStatus){ 
     if(textStatus == "success"){ 
       if(data.result == "1"){ 
        //sucessful 
        $('#ajaxld').hide(); 
        htmlstr += "Deleted"; 
       } 
          } 
        } 
      } 

可否請你建議如何更進一步處理?

+0

也許你表現出更多的代碼(JavaScript的)的 – dpp

+2

您需要向我們展示了javascript函數'confirmDelete' – Paulpro

回答

0

你有連接到偶然的鏈接點擊處理程序?通常情況下,返回false將確實取消導航..但我不認爲它取消了一個點擊處理程序時附加這樣的。

所以,如果你不喜歡的東西..

$("#_delete_btt").click(submitTheForm); 

document.getElementById('_delete_btt').onclick(submitTheForm) 

在前面一點,那仍然可能會提交表單,因爲它是不聽的「可我繼續從另一個受限的回調。假設是這種情況,將一個函數綁定到'a'標籤,該標籤將確認,然後根據用戶的響應進行處理。

編輯:

根據您發佈的新代碼,我們只需要改變程序流。要麼把確認的點擊回調:

$("#_delete_btt").click(function(e){ 
     if(confirmDelete()){ 
      Access.processSubmit(); 
     } 
    }); 

或把代碼來處理在confirmDelete提交:

function confirmDelete() { 
    var agree=confirm("Are you sure you wish to continue? This will remove the selected item permamently!"); 
    if (agree){ 
     Access.processSubmit(); 
     return true ; 
    } else { 
     return false ; 
    } 
} 

無論哪種方式,我一直懷疑是發生的事情其實發生。無論回調是否返回false,click事件都會觸發,導致processSubmit也會觸發。

+0

我貼我的問題的Edit2中的.js代碼。你可以看看它,並建議我在哪裏添加你提到的代碼片段? – Shehroz

+1

根據您更新的內容,該流程提交必須在某處進行綁定。如果你可以找到它被綁定或被調用的地方,那將有很大的幫助......在那一點上,我建議只刪除該行並從confirmDelete調用processSubmit。 – Stephen

+0

我部分理解你所說的。我還在javascript部分添加了更多代碼,以便您更好地理解。還有什麼想法? – Shehroz

0

據我所知,如果定義了href屬性,則返回false的Javascript並不會阻止鏈接被遵循。

因爲這不是你的情況我會定義一個href屬性設置爲#

<a href="#" id="_delete_btt" class="button" onClick="confirmDelete()">Delete</a> 
+0

謝謝,但這並沒有幫助! – Shehroz

相關問題