Клавиша ввода вызывает ненужную обратную передачу

У меня есть форма веб-приложения в vb.net. Когда я нажимаю переключатель, на сервере запускается обратная передача. Если я одновременно нажму Enter, это вызовет еще одну обратную передачу на сервер. Как предотвратить вторую обратную передачу?

<td class="tdClassic" id="tdCT">
<asp:RadioButton ID="rbSingle" runat="server" Text="Singl" AutoPostBack="true" GroupName="grpT" />
<asp:RadioButton ID="rbMultiple" runat="server" Text="Multiple" AutoPostBack="true" GroupName="grpTrainer" />
</td>

person Tarang    schedule 13.05.2015    source источник
comment
Как вы можете одновременно щелкнуть переключатель и нажать Enter, это обычная практика?   -  person Tim Schmelter    schedule 13.05.2015
comment
Если у вас установлена ​​автопостбэк для радиокнопки, то все это поведение является желаемым. Чтобы остановить отправку формы, когда вы нажмете Enter, вам нужно будет использовать javascript   -  person matt_lethargic    schedule 13.05.2015
comment
нет, это не обычная практика. Случайно я обнаружил эту вещь в своем веб-приложении. обычно пользователь не предполагает заниматься такой практикой, но, насколько мне известно, я хочу знать об этом.   -  person Tarang    schedule 13.05.2015
comment
@Tarang: почему тебя волнуют вещи, которые, скорее всего, никогда не произойдут? Используете ли вы обработчики событий или вся ваша логика в Page_Load? Если вы используете событие CheckedChanged RadioButton, оно не должно запускаться, когда пользователь нажимает ввод.   -  person Tim Schmelter    schedule 13.05.2015
comment
@matt_lethargic в .net нет собственности? если нет, то как предотвратить с помощью javascript?   -  person Tarang    schedule 13.05.2015
comment
@TimSchmelter да, я использую page_load для получения значений по умолчанию при первом вызове страницы   -  person Tarang    schedule 13.05.2015
comment
msdn .microsoft.com/en-us/library/ Существует свойство автопостбэка. Почему бы не опубликовать код, тогда кто-то сможет сразу найти проблему. И, пожалуйста, уточните суть вопроса   -  person matt_lethargic    schedule 13.05.2015
comment
@matt_lethargic, как вы сказали, я отредактировал свой вопрос.   -  person Tarang    schedule 13.05.2015


Ответы (1)


Если вы используете jQuery, вы можете остановить отправку формы ключом endter, используя:

$(document).keypress(function(e)
{
    if(e.keyCode === 13)
    {
        e.preventDefault();
        return false;
    }
});

если нет, это может сработать:

<script language="JavaScript">
var nav = window.Event ? true : false;
if (nav) {
window.captureEvents(Event.KEYDOWN);
window.onkeydown = NetscapeEventHandler_KeyDown;
} else {
document.onkeydown = MicrosoftEventHandler_KeyDown;
}

function NetscapeEventHandler_KeyDown(e) {
if (e.which == 13 && e.target.type != 'textarea' && e.target.type != 'submit') { 
return false; 
}
return true;
}

function MicrosoftEventHandler_KeyDown() {
if (event.keyCode == 13 && event.srcElement.type != 'textarea' && 
event.srcElement.type!= 'submit')
return false;
return true;
}
</script>

или если у вас есть кнопка на странице, то UseSubmitBehavior может быть лучшим решением:

<asp:button id="Button1" text="Submit" onclick="SubmitBtn_Click"    usesubmitbehavior="false" runat="server"/>

см. https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.usesubmitbehavior.aspx

person matt_lethargic    schedule 13.05.2015
comment
ничего себе, выше два решения работают для меня. но я хочу рассказать вам об usesubmitbehavior=false, поскольку я знаю об этом, если вы назначаете свойство, то оно только предотвращает событие нажатия этой кнопки, но событие me.load не будет предотвращено этим. когда вы нажимаете ввод, чем me.load всегда получает выполнить м я правильно или неправильно? пожалуйста, очистите мой взгляд !! - person Tarang; 13.05.2015
comment
Me.Load запускается, когда страница загружена или отправлена ​​обратно. Причины обратной передачи могут быть разными. - person matt_lethargic; 13.05.2015
comment
поэтому Me.Load — это первое событие, которое вызывается при возникновении любой обратной передачи. После того, как это конкретное событие для любого элемента управления выполняется, правильно? - person Tarang; 13.05.2015
comment
да, для каждой обратной передачи и при первой загрузке страницы. msdn.microsoft.com/en-us/ библиотека/ms178472%28v=vs.85%29.aspx - person matt_lethargic; 13.05.2015