Как отключить поведение отправки asp: ImageButton? - PullRequest
12 голосов
/ 13 октября 2009

У меня есть кнопка с изображением на странице, которая может быть вызвана щелчком мыши, по умолчанию она срабатывает при нажатии на клавишу ввода, которую я хочу отключить.

Я знаю об атрибуте «UseSubmitBehaviour» в asp: Button, есть ли способ сделать то же самое в asp: ImageButton?

Ответы [ 8 ]

11 голосов
/ 28 ноября 2009

Я предполагаю, что у вас есть какие-то элементы управления вводом, и вы не хотите, чтобы нажатие клавиши ввода автоматически отправлялось, когда пользователь нажимает клавишу ввода. Если это так, вы можете прикрепить событие 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 используйте обработчик OnKeyDown для тега <body> на вашей странице.

Код 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>
7 голосов
/ 01 декабря 2009

Если вы поместите свой контент в 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>

В этом примере btn_Test2 будет нажиматься при нажатии Enter, где обычно btn_Test1 будет нажиматься

2 голосов
/ 01 декабря 2009

Форма выполнит первую кнопку, найденную на странице, когда вы нажмете Enter. Если вы можете переместить ImageButton вниз по странице, чтобы она больше не была первой кнопкой в ​​разметке, и использовать CSS для ее правильного позиционирования, это должно решить вашу проблему. Я исправил то же самое на прошлой неделе, и это сработало для меня. Я пошел с этим решением, потому что оно не требует JavaScript для правильной работы.

2 голосов
/ 01 декабря 2009

Используйте ответ Келси (Этот ответ вики-сайта)

... но, пожалуйста, обратите внимание на несколько вещей, когда вы реализуете это.

  1. Я бы порекомендовал простой старый метод javascript, если вы еще не используете jQuery. если вы используете этот метод, просто return (keynum! = 13) не делает глупостей, как if (true) возвращает true; иначе вернуть ложь;

  2. Вам не нужно назначать onkeydown из кода ниже. Это может быть сделано в разметке, и это намного чище, когда вы делаете.

  3. Не отключайте клавишу ввода во всей вашей форме. Вы можете сделать это только в своих входных данных, но если вы сделаете это во всей форме, вы не сможете добавить возврат каретки в текстовой области.

  4. Если вы используете jQuery, я бы рекомендовал добавить класс CSS с именем "disableEnterKey" и назначить его элементам формы, которые вы хотите отключить, а затем вызвать метод jQuery Келси для $ (". DisableEnterKey") в документ готов.

  5. Не отвечайте слишком похоже на кого-либо в SO, даже если вы не полностью согласны с ответом. И даже если ответ был прост и тысячи людей, вероятно, сделали то же самое. Это "копирование". Что похоже на то, чтобы быть "резаком" или "рассказом о черепахах" ... что плохо.

(этот ответ был опубликован вики-сообществом, поскольку эта ветка вопроса стала глупой)

1 голос
/ 26 октября 2012

См. Следующую ссылку. Эту проблему можно решить для всех проблем, связанных с отправкой по умолчанию. http://weblog.kevinattard.com/2011/08/aspnet-disable-submit-form-on-enter-key.html

1 голос
/ 04 декабря 2009

вы хотите что-то вроде

<form ...>

  <!-- some code here -->

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

  <button>normal button </button>

</form>
1 голос
/ 29 ноября 2009

Вместо этого используйте asp: изображение. Затем поместите некоторый код javascript в клик "javascript:document.getElementById('imageClicked').setAttribute('value', 'true'); document.myform.submit();"

Установите значение скрытого поля (используя javascript), чтобы сообщить коду на стороне сервера, что изображение было нажато.

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

Затем, в конце обработки обратной передачи на сервере, сбросьте значение hiddenField:

document.getElementById('imageClicked').setAttribute('value', 'true');
0 голосов
/ 06 апреля 2016

Пожалуйста, используйте этот код

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