如何禁用asp:ImageButton的提交行为?

时间:2009-10-13 16:31:28

标签: asp.net imagebutton

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

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

8 个答案:

答案 0 :(得分: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键提交表单。 case使用页面上<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>

答案 1 :(得分:7)

如果您将内容放在 asp:Panel 中,则可以使用 DefaultButton 属性将其他按钮设置为默认值,这样您的图片按钮就不会被点击。< / p>

<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

答案 2 :(得分:2)

使用Kelsey的答案(这个答案是wiki'ed)

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

  1. 如果您还没有使用jQuery,我建议使用普通的旧javascript方法。如果你使用那个方法,只需返回(keynum!= 13)不要做一些愚蠢的事情,如果(true)返回true;否则返回false;

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

  3. 请勿在整个表单中停用回车键。您只能在输入中执行此操作,但如果您在整个表单中执行此操作,则无法在textarea中添加回车。

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

  5. 即使您不完全同意答案,也不要对SO上的任何人回答太相似。即使答案很简单,成千上万的人也可能做了同样的事情。这是“复制”。这类似于“刀具”或“喋喋不休”......这很糟糕。

  6. (这个答案一直是社区维基,因为这个问题线程变得很愚蠢)

答案 3 :(得分:2)

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

答案 4 :(得分: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');

答案 5 :(得分:1)

你想要像

这样的东西
<form ...>

  <!-- some code here -->

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

  <button>normal button </button>

</form>

答案 6 :(得分:1)

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

答案 7 :(得分:0)

请使用此代码

<script type="text/javascript" language="javascript">
$(document).ready(function {
    $("#<%=imageClicked.ClientID%>").prop('disabled',true)
});
</script>