【问题标题】:How to prevent the trigger of another button如何防止触发另一个按钮
【发布时间】:2014-12-02 17:27:43
【问题描述】:

我的 ASP.net 页面中有以下内容:

<input type="text" placeholder="Search..." size="30" id="pageLink" />
<br />
<span id="imgGo" class="imgGo floatRight"></span>

JQuery:

$('.imgGo').click(function () {
    var strString = $("#pageLink").val()
    var strSearch = "http://www.google.com/search=";
    var url = strSearch + strString;
    window.open(url, '_blank');
    return false;
});

$("#pageLink").keyup(function (event) {
    if (event.keyCode == 13 || event.which == 13) {
        $(".imgGo").click();
    }
});

当我在文本框中输入内容并单击 imgGo 范围时,它可以正常工作,但如果我按 Enter 键,则会触发位于另一个面板中的搜索按钮。

如何修改我的 JQuery 代码以确保不会发生这种情况,或添加代码隐藏以确保仅当在 pageLink 文本框具有焦点时按下输入按钮时才会触发 imgGo

我尝试了以下方法,但没有成功,因为 imgGo 不是按钮:

<asp:Panel ID="pnlMedSearch" runat="server" DefaultButton="GoImg">
    <!--<input type="text" placeholder="Search..." size="30" id="p2" />-->
    <asp:TextBox Width="30" ID="pageLink" runat="server" />
    <br />
    <!--<span id="imgGo" class="imgGo floatRight"></span>-->
    <asp:Label ID="imgGo" CssClass="imgGo floatRight" runat="server" />
</asp:Panel>

我收到以下错误:

The DefaultButton of 'pnlMedSearch' must be the ID of a control of type IButtonControl.

我想使用不是 ASP.net 控件的文本框,因为 placeholder 属性对我来说很重要。

【问题讨论】:

  • 其他面板中的搜索按钮是否有imgGo 类?我注意到您正在通过 jQuery 定位 .imgGo。这将触发任何匹配元素的事件,您可能希望基于唯一的id 来执行此操作。
  • imgGo 仅用于此实例。
  • 您的错误信息有点奇怪The DefaultButton of 'pnlMedSearch' must be the ID of a control of type IButtonControl... 您是否尝试使用标签作为默认按钮?在您的示例 HTML 中,您已将默认按钮设置为 GoImg,那么为什么不将 &lt;asp:Button&gt; 添加到 ID 为 GoImg 的面板中呢?这应该工作......
  • 我需要使用placeholder作为我在ASP.net中无法使用的文本框
  • 您绝对可以在&lt;asp:TextBox /&gt; 上使用placeholder="" 属性。例如&lt;asp:TextBox Width="30" ID="pageLink" runat="server" placeholder="Foo" /&gt;

标签: c# jquery html asp.net


【解决方案1】:

我保留了相同的 HTML 内容并将我的 Jquery 修改为以下内容:

$("#medlineSearch").keypress(function (event) {
        if (event.which == 13) {
            $("#imgGo").click();
            return false;
        }
    });

添加return false; 确保它没有调用页面上的任何其他内容。

【讨论】:

    【解决方案2】:

    相同的替代版本。

    在任何标签上注册为事件:

     onkeydown="pressButtonOnEnter('IdOfMyButton', event);" 
    

    进入你的 .js 文件:

    function pressButtonOnEnter(buttonId, event) {
        var key = (evt.which) ? evt.which : evt.keyCode;
        if (key == 13) {
            $("#" + buttonId).click();
        }
    }
    

    它也适用于 asp.net。例如,您可以简单地将其添加到 asp:textbox 中。

    【讨论】:

    • 感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多