0

我们的页面中有一个搜索文本框和搜索按钮。当用户输入搜索字符串并按回车键时,我们需要触发服务器端按钮单击事件。代码在用户控件(ascx)中。代码是……

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 函数,但即使这样也没有被调用。谁能让我们知道我们在这里做错了什么?

4

3 回答 3

0

问题是因为使用链接按钮。

当链接按钮被渲染时,它会像

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

来自 JS 的 Click 事件将触发onclick属性中定义的处理程序。在您的情况下,定义了 href 属性并且不会触发 href 属性。

选项:

1)您可以使用 asp:button 代替 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"));
                    }
                }

希望它可以帮助你。

于 2013-01-24T07:27:28.417 回答
0

如果更改标记不是不可能的,您可以将搜索输入包装在表单元素中并在该表单上使用submit()事件。

这样,点击 Return 和点击“Search”按钮都会触发该事件。

于 2012-11-26T06:32:31.410 回答
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 librariesfacing 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');
});

在这里你附上你的$标志。这样您就可以不与其他库发生冲突。

你可以在这里找到更多信息:http: //docs.jquery.com/Plugins/Authoring

于 2012-11-26T07:21:42.510 回答