2012-11-26 325 views
0

我們在頁面中有一個搜索文本框和搜索按鈕。當用戶輸入搜索字符串並點擊輸入時,我們需要觸發服務器端按鈕點擊事件。該代碼位於用戶控件(ascx)中。 代碼是....JQuery - Button Click not firing

ASCX

<td class="search_txt_box"> 
    <asp:TextBox ID="txtSearchBox" class="frmdefault" runat="server" 
       MaxLength="100" Width="300"></asp:TextBox> 
</td> 
<td class="new_search_btn"> 
    <asp:LinkButton ID="btnSearchHelp" class="ovalbutton" runat="server" 
      OnClick="btnSearchHelp_Click"> 
    <span id="spanBtnTxt" runat="server" class="btn_arrow_space"></span> 
    </asp:LinkButton> 
</td> 

JQuery的

(function ($) { 
    $(function() { 
      $('input[id$="txtSearchBox"]').keypress(function (e) { 
     var keyCode; 

     if (window.event) keyCode = window.event.keyCode; 
     else if (e) keyCode = e.which; 
     else return true; 

     if (keyCode == 13) { 
      //alert("Out - Clicked"); 
      //alert($('[id*="btnSearchHelp"]').attr('id')); 

      $('[id*="btnSearchHelp"]').click(); 
      return false; 
      //$('[id*="btnSearchHelp"]').on('click', 'a', function (e) { 
      // alert('this is the click'); 
      // e.preventDefault(); 
      //}); 
     } 
    }); 
    }); 
    } (jQuery)); 

ascx.cs

protected void btnSearchHelp_Click(object sender, EventArgs e) 
{ 
    //handle search click 
} 

我們試圖尋找答案的論壇,並試圖幾個,但沒有他們工作。顯示「Out-Clicked」警報,並顯示按鈕動態ID的下一個警報,但之後沒有任何反應。我們寫了一個內聯的Jquery函數,但即使這樣也沒有調用。任何人都可以讓我們知道我們在這裏做錯了嗎?

+0

用<%= txtSearchBox.ClientID%>替換txtSearchBox。客戶端的控制我會產生不同的。 – Nps

+0

@Nps這不是問題,因爲事件被調用,因爲我可以看到警報框。但我同意你的評論。謝謝 – StewieHere

回答

0

如果更改標記沒有問題,則可以將搜索輸入封裝到表單元素中,並在該表單上使用submit()事件。

這樣既擊中Return並單擊「搜索」按鈕將觸發該事件。

+0

感謝您的回覆。但是,這不意味着嵌套表單? Arent我們應該不這樣做? – StewieHere

0

我覺得你的問題是在這裏:

(function ($) { 

     //you are trying to capture domready function in this 
     //This is actually a way to author a jQuery Plugin 

} (jQuery)); 
     // ^------------------------- 
     // although you have put one extra paranthesis ")" at the closing 
     // this doesn't matter this won't work if you remove it though 

If you are using different js libraries,你在圖書館facing issues of conflict那麼你必須save your '$' sign在這個封閉如上。雖然同樣的事情you can do with your doc ready功能this way

jQuery(function($){ 

    // I just used a simple alert function to test 
    // You can do your stuff here. 
    alert('123'); 
}); 

在這裏,你是封閉的$跡象。這樣你就不會被其他庫衝突。

可以findout更多在這裏:http://docs.jquery.com/Plugins/Authoring

0

問題是因爲使用鏈接按鈕。

當鏈接按鈕呈現,它會像

<a id="btnSearchHelp" class="ovalbutton" href="javascript:__doPostBack('btnSearchHelp','')"><span id="spanBtnTxt"> 

點擊從JS事件將觸發在的onclick屬性定義的處理程序。在你的情況下,href屬性被定義並且href屬性不會被觸發。

選項:

1)您可以使用asp:按鈕代替asp:link按鈕。 2)使用下面的代碼而不是你的$('[id * =「btnSearchHelp」]')。click();

var submitButton = $('[id*="btnSearchHelp"]'); 
var events = submitButton.data('events'); 
       if (submitButton.get(0).onclick) { 
        eval(submitButton.get(0).onclick()); 
       } 
       if (events != null && events.click != null && events.click.length > 0) { 
        $(submitButton).trigger(events.click); 
        $.each(events.click, function (index, evt) { 
         evt.handler(); 
        }); 
       } 

       if ($.trim(submitButton.attr("href")) != "") { 
        if (submitButton.attr("href").toString().toLowerCase().indexOf("javascript:") != -1) { 
         eval(submitButton.attr("href")); 
        } 
       } 

希望它能幫助你。