Фокус на TextBox запускает PageLoad с использованием C # .net

У меня есть функция, которая устанавливает фокус на следующее поле через JS в форме при нажатии ввода:

function pressEnter(obj, e) {
    var key = e.keyCode ? e.keyCode : e.which;
    if (key === 13) {
        var total = document.forms[0].elements.length;
        for (var i = 0; i < total; i++) {
            if (obj.id == document.forms[0].elements[i].id) {
                index = i + 1;
                while ((document.forms[0].elements[index].type == "hidden" || document.forms[0].elements[index].nodeName == "FIELDSET" || document.forms[0].elements[index].disabled == true)) {
                    index++;
                    if (document.forms[0].elements[index] == null)
                        return;
                }
                $('#' + document.forms[0].elements[index].id).focus();
                break;
            }
        }
    }
}

В теге BODY у меня есть следующий сценарий: onkeypress = "var key = event.keyCode? Event.keyCode: e.which; return (key! = 13);", чтобы избежать публикации при нажатии [Enter]

Работать нормально, если я установил [TextBox1 autoPostBack = false] [TextBox2 autoPostBack = false]. Введите TextBox1, [ввод], TextBox2 получает фокус и запускает событие onkeypress тела.

Хороший.

Вот и проблема

Если я установил [TextBox1 autoPostBack = false] [TextBox2 autoPostBack = true], когда textBox2 получает фокус, он обновляет страницу, выполняет публикацию и не запускает событие onkeypress тела. В TextBox2 ничего не набиралось. Я бы хотел, чтобы TextBox с AutoPostBack = true не создавал публикацию и не обновлял экран, пока не будет введено значение и не будет запущен onBlur.

Подробно, если нажать TAB, такой проблемы не возникает, просто при программной установке фокуса через JS.

Если мне кто-нибудь объяснит почему, буду очень признателен.

Тарсис - Варуа


person Varois    schedule 03.06.2011    source источник
comment
включить разметку aspx   -  person Allen Rice    schedule 03.06.2011
comment
Попробуйте добавить return false; в функцию pressEnter, и, надеюсь, это остановит запуск кода автоматической обратной передачи ASP.NET.   -  person Shadow Wizard Wearing Mask V2    schedule 04.06.2011
comment
Спасибо за все ответы. Я решил свою проблему, но не смог найти причину, по которой это происходило. Чтобы решить эту проблему, я изменяю свойство ClientIdMode на AutoID во всех полях, для которых AutoPostBack = true. Вот и все ... моя форма перестает запускать POST, когда эти поля получают фокус.   -  person Varois    schedule 17.06.2011


Ответы (1)


вам необходимо иметь <form onsubmit="return false;"> для вашей формы, как указано здесь: Как предотвратить нажатие клавиши ENTER для отправки веб-формы?

person Akhil    schedule 03.06.2011
comment
Ну, в общем, мой вопрос не в том, чтобы помешать отправке формы с помощью Enter. Я уже делаю это с помощью этого небольшого кода в теге BODY. поэтому, когда я нажимаю ENTER, ничего не происходит, кроме фокуса в следующем поле. Если я воспользуюсь вашим кодом, я больше не смогу отправлять форму. и это не тот случай .. Отправка происходит, когда asp: TextField, установленный с autoPostBack = true и onTextChanged = someFunction, получает фокус. но для меня onTextChanged просто запускается, когда вы покидаете поле. Спасибо, в любом случае. - person Varois; 04.06.2011
comment
onTextChanged - это метод на стороне сервера, и он не должен запускаться до тех пор, пока форма не вернется. Вы случайно не используете UpdatePanel? - person Akhil; 04.06.2011
comment
Какой установлен режим обновления? и можно ли установить ChildrenAsTriggers = false? - person Akhil; 04.06.2011
comment
Сейчас я не устанавливаю ни один из них .. но я пробовал оба: всегда и условно. - person Varois; 04.06.2011
comment
вы пробовали ChildrenAsTriggers = false? - person Akhil; 04.06.2011