12

我在页面中有一个图像按钮,可以在鼠标单击时触发,默认情况下它会在输入时触发,我也想禁用它。

我知道 asp:Button 中的“UseSubmitBehaviour”属性,有没有办法在 asp:ImageButton 中做同样的事情?

4

8 回答 8

11

我假设您有某种输入控件,并且您不希望在用户意外按下回车键时自动提交回车键。如果是这样,您可以将 javascript onkeypress 事件附加到要禁用此行为的每个控件。

function disableEnterKey(e)
{
     var key;
     if (window.event) key = window.event.keyCode; // Internet Explorer
     else key = e.which;

     return (key != 13);
}

// In your aspx file Page_Load do the following foreach control you want to disable
// the enter key for:
txtYourTextBox.Attributes.Add("OnKeyPress", "return disableEnterKey(event);");

如果您需要完全禁用 Enter 键提交表单。<body>案例在页面上的标记上使用 OnKeyDown 处理程序。

javascript代码:

if (window.event.keyCode == 13) 
{
    event.returnValue = false; 
    event.cancel = true;
} 

使用 JQuery,这会更干净、更容易,也是推荐的方法。您可以使用以下方式进行扩展:

jQuery.fn.DisableEnterKey =
    function()
    {
        return this.each(function()
        {
            $(this).keydown(function(e)
            {
                var key = e.charCode || e.keyCode || 0;
                // return false for the enter key
                return (key != 13);
            })
        })
    };

// You can then wire it up by just adding this code for each control:
<script type="text/javascript" language="javascript">
    $('#txtYourTextBox').DisableEnterKey();
</script>
于 2009-11-28T18:36:49.047 回答
7

如果您将内容放在asp:Panel中,您可以使用DefaultButton属性将不同的按钮设置为默认按钮,这样您的图像按钮就不会被点击。

<asp:Panel runat="server" ID="pnl_Test" DefaultButton="btn_Test2">
    <asp:ImageButton runat="server" ID="btn_Test1" />
    <asp:Button runat="server" ID="btn_Test2" />
</asp:Panel>

在此示例中,当您按 Enter 键时将单击btn_Test2,通常会单击btn_Test1

于 2009-12-01T20:51:51.610 回答
2

使用凯尔西的答案(这个答案是 wiki'ed)

...但是在实施时请注意一些事项。

  1. 如果您还没有使用 jQuery,我会推荐普通的旧 javascript 方法。如果您使用该方法,只需 return (keynum != 13) 不要做一些愚蠢的事情,例如 if(true) return true; 否则返回假;

  2. 您不必从后面的代码中分配 onkeydown 。这可以在标记中完成,当你这样做时它会更干净。

  3. 不要禁用整个表单中的回车键。您只能在输入中执行此操作,但如果您在整个表单中执行此操作,您将无法在文本区域中添加回车。

  4. 如果您确实使用 jQuery,我建议添加一个名为“disableEnterKey”的 CSS 类并将其分配给您要禁用的表单元素,然后在准备好的文档中对 $(".disableEnterKey") 调用 Kelsey 的 jQuery 方法。

  5. 即使您不完全同意答案,也不要与 SO 上的任何人回答太相似。即使答案很简单,而且可能有成千上万的人做过同样的事情。是“抄袭”。这类似于成为“切割者”或“流言蜚语”......这很糟糕。

(这个答案已经被社区维基编辑了,因为这个问题线程变得很愚蠢)

于 2009-12-01T20:19:08.420 回答
2

当您按 Enter 时,表单将执行它在页面上找到的第一个按钮。如果您可以将ImageButton页面进一步向下移动,使其不再是标记中的第一个按钮,并使用 CSS 正确定位它,这应该可以解决您的问题。我上周修复了同样的问题,这对我有用。我选择了这个解决方案,因为它不需要 JavaScript 才能正常工作。

于 2009-12-01T20:34:48.170 回答
1

请改用 asp:image。然后在 onclick " javascript:document.getElementById('imageClicked').setAttribute('value', 'true'); document.myform.submit();"中放置一些 javascript 代码

设置隐藏字段的值(使用 javascript)以告诉服务器端代码该图像已被单击。

document.getElementById('imageClicked').setAttribute('value', 'true');

然后,在服务器上处理回发结束时重置 hiddenField 的值:

document.getElementById('imageClicked').setAttribute('value', 'true');
于 2009-11-29T03:54:02.880 回答
1

你想要类似的东西

<form ...>

  <!-- some code here -->

  <button style='display:none' onclick='return false'>here comes the magic</button>

  <button>normal button </button>

</form>
于 2009-12-04T06:46:57.013 回答
1

请参阅以下链接。这可以解决所有默认按钮提交问题。 http://weblog.kevinattard.com/2011/08/aspnet-disable-submit-form-on-enter-key.html

于 2012-10-26T08:44:02.470 回答
0

请使用此代码

<script type="text/javascript" language="javascript">
$(document).ready(function {
    $("#<%=imageClicked.ClientID%>").prop('disabled',true)
});
</script>
于 2016-04-06T06:33:04.180 回答