jquery
  • asp.net
  • 2011-05-12 75 views 0 likes 
    0

    我有一個網格控件,允許用戶在網格中添加一個值。防止__doPostBack發射掉

    它生成以下鏈接插入一個全新的項目。

    <a onclick="if(!$find('radGridHolidays_ctl00').insertItem()) return false;" id="radGridHolidays_ctl00_ctl02_ctl02_PerformInsertButton" href='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("radGridHolidays$ctl00$ctl02$ctl02$PerformInsertButton", "", true, "", "", false, true))'>Insert</a> 
    

    我有一些自定義的jQuery代碼驗證提交之前的文本框。我試圖阻止提交__doPostBack的鏈接,但我的代碼無法正常工作。

    // if need be, move this to its own .js file 
        String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); }; 
    
        // Document loaded, let's register some validation 
        $(function() { 
    
         $('#holidayValidationDisplay').hide(); 
    
         $('a#radGridHolidays_ctl00_ctl02_ctl02_PerformInsertButton').click(function(e) { 
    
          e.stopImmediatePropagation(); 
          e.preventDefault(); 
          var hasErrors = false; 
    
          // alert('You clicked me!'); 
          var holidayName = $('#radGridHolidays_ctl00_ctl02_ctl02_validatorHolidayName').val().trim(); 
          var holidayDate = $('#radGridHolidays_ctl00_ctl02_ctl02_RDIPHolidayDate_dateInput_text').val().trim(); 
    
          if (holidayName.length == 0) { 
           hasErrors = true; 
           $('#holidayList').append('<li>You must provide a holiday name</li>'); 
          } 
    
          if (holidayDate.length == 0) { 
           hasErrors = true; 
           $('#holidayList').append('<li>You must provide a holiday date</li>'); 
          } 
    
          if (hasErrors) { 
           $('#holidayValidationDisplay').show(); 
           return false; 
          } 
         }); 
        }); 
    

    但是鏈路仍然發射了,當我不想,如果有錯誤發生的回發。我看到一些關於防止它在UpdatePanel中工作的內容,但我不確定那裏的解決方案適用於我的場景。

    如果有人有任何想法,我都是「耳朵」。

    +0

    我認爲在href:中的元素做回傳。你可以刪除它,它不應該回來? – Brett 2011-05-12 19:25:19

    +0

    @Brett,我刪除了href,但沒有奏效。 – coson 2011-05-12 19:32:31

    回答

    0

    我相信你遇到的問題是,按鈕不知道,如果表格是有效的或沒有。這是我做的:

    編寫基於一些其它的值返回true或false的自定義函數:

    function isTermsChecked(oSrc, args) 
    { 
        args.IsValid = $("#chkTerms").is(':checked'); 
    } 
    

    所以在這個例子中,如果我的條件複選框被選中,然後args.IsValid是真的。只需轉到鏈接屬性,應該有一個名爲OnClientClick的屬性。你會把isTermsChecked

    在你的具體情況下,你可能會想使用一個變量。如果jQuery出現無效,請將該變量設置爲false,並且自定義驗證函數將引用該變量。基本上,如果它是真的,按鈕將繼續,錯誤,它不會。

    編輯:如果你在每一行做驗證,我看到的問題是,如果一個行驗證失敗,然後我的解決方案上面將禁用,直到網格中的所有驗證通過了所有的鏈接按鈕。你可能想忘記自定義功能,做到這一點:

    如果jQuery驗證失敗,然後找到該行中的鏈接按鈕,並與價值return false添加OnClick屬性,那麼如果驗證通過,刪除該屬性。

    +0

    錨鏈接是自動生成的,所以我沒有控制OnClientClick。也許我可以添加該屬性? – coson 2011-05-12 19:35:08

    +0

    @Coson,是的,你可以添加任何你想要的屬性。新的問題是,既然你有一個網格,如果你的一行出現無效,它將基本上使所有的鏈接按鈕不可點擊。我會編輯我的答案。 – 2011-05-12 19:40:32

    +0

    我走了一個稍微不同的方向來解決我的問題。但是,既然你給了我不同方向的靈感,那麼我就會給你一些提示。 – coson 2011-05-13 16:20:49

    0

    不是直接回答你的問題,但你可以創建一個「假」按鈕來進行驗證,如果成功,點擊.NET按鈕。

    pesudocode:

    <a onclick="if(validate()) $('#dotnetbutton').trigger('click')">Submit</a> 
    <asp:Linkbutton id="dotnetbutton" style="position:absolute;left:-99999px">real submit button</asp:LinkButton> 
    
    +0

    愛上-1狙擊手誰不遵循先留言的規則。 +1就是爲了這個。 – 2011-05-12 19:53:09

    +0

    感謝您的期待:) – Jeff 2011-05-13 13:34:08

    相關問題