2013-12-20 27 views
0

我有HTML頁面包含兩個元素:輸入文本和保存按鈕。我需要,即JQuery覆蓋onclick函數。當用戶單擊按鈕保存時,JQuery必須調用函數Validate(),如果字段驗證,則調用默認函數。所以我需要,如果文本框長度不等於14顯示消息 - >「該字段無效!」。如果是,請調用默認功能,我需要看到警報 - >「123」。但現在不行了。那麼,這是如何解決的?不重寫函數JQuery

<!DOCTYPE html> 
    <html> 
    <head> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script> 
    </head> 
    <body> 

    <form action="demo_form.asp"> 
    Phone: <input type="text" name="Phone" title="title1" value="(999) 999-9999"> 
    <input class="ms-ButtonHeightWidth" type="button" target="_self" accesskey="O" 
    onclick="alert('123')" value="Save" > 
    </form> 

    <script type="text/javascript"> 
    $(document).ready(function(){ 
    var temp = $('input[value="Save"]').click; 
    $('input[value="Save"]').click(Validate); 

    function Validate() { 
     if ($('input[title="title1"]').val().length != 14) { 
      alert("The field not valid!"); 
     }else { 
      temp(); 
     } 
    } 
    }); 

    </script> 

    </body> 
    </html> 

對不起。我沒有說html。此頁面在ASP上生成。事件「onclick =」alert('123')「」給我服務器,我不能在窗體上使用Id,按鈕,因爲它有任何不同的時間。我只能使用值和標題,因爲服務器不會更改它。我無法刪除onclick。所以這就是爲什麼我需要覆蓋onclick。

回答

0

我認爲這是你想要的。我不認爲有一個處理程序阻止另一個處理程序運行(您只能阻止默認操作),我甚至不確定內聯處理程序的激活順序與jQuery添加的順序。所以你需要從元素中移除內聯處理程序,並從驗證函數中明確地調用它。

$(function() { 
    var old_click_handler = $('input[value="Save"]').attr('onclick'); 
    $('input[value="Save"]').attr('onclick', null).click(Validate); 

    function Validate() { 
     if ($('input[title="title1"]').val().length != 14) { 
      alert("The field not valid!"); 
     } else { 
      if (typeof old_click_handler == 'string') { 
       eval(old_click_handler); 
      } else { 
       old_click_handler(); 
      } 
     } 
    } 
}); 
+0

我想我們都誤解了OP的問題。在這種情況下,調用'preventDefault()'並不會阻止已經綁定的'onclick'屬性在**自定義警報> http://jsfiddle.net/Cea7z/1/之前觸發**。請注意,如何首先更改字段值會觸發「123」的警報,然後是所需的輸出?我相信OP會詢問如何防止初始函數觸發,如果if()語句是真的。 – BenM

+0

@BenM我認爲你是對的。我在那個基礎上重新回答了我的答案。 – Barmar

+0

謝謝!這就是我需要的! – user2956406

0

爲什麼你給「覆蓋」事件?只需在事件中添加驗證即可。此外,使用name而不是title來標識元素。

<input type="text" name="Phone" title="title1" value="(999) 999-9999"> 
<input type="button" id="myButton" /> 

$("#myButton").click(function() { 
    if(Validate()) 
     temp(); 
    else 
     alert("The field not valid!"); 
}); 

function Validate() { 
    if ($("input[name=Phone]").val().length != 14) { 
     return false; 
    return true; 
} 

function temp() { 
    //Do something 
} 
0

我想你有一個循環。您的點擊處理程序會執行一些驗證,但如果驗證無誤,則基本再次調用驗證。

建議您使用表格的onsubmit,如果輸入未驗證(或使用event.stopPropagation()),則使用return false

<form id="myform"> 

然後:

$(document).ready(function() { 
    $('#myform').submit(function (event) { 
     var value = $('input[title="title1"]').val(); 
     if (value.length !== 14) { 
      return false; 
     } 
    }); 
}); 
+0

不,我不能修改表單並輸入不同的標籤,因爲它是asp服務器。 – user2956406

+0

ID只是爲了更容易識別表單。然後使用'$('form')。first'或類似的東西。 – fiskeben