2012-11-26 206 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")); 
        } 
       } 

希望它能帮助你。