Функция javascript Settimeout () игнорируется - PullRequest
0 голосов
/ 24 ноября 2011

У меня есть простая кнопка на моей странице aspx:

<asp:Button ID="a1" runat="server" OnClientClick="test2();" />

и функция javascript:

function test2() {

    setTimeout("alert('hello')", 1250);

}

SetTimeout полностью игнорируется - предупреждение не будет отображаться и таймер не будет ждать. Я прочитал около 10 сообщений об этой проблеме на этом сайте, ни одно из решений не работает. я попытался вызвать другую функцию вместо функции оповещения, я попытался вызвать функцию с параметрами, используя функцию () {..}. я также попытался вызвать Settimeout прямо из функции OnclientClick:

OnClientClick="setTimeout('alert(\'hello\')',1250);"

ничего не работает, время ожидания игнорируется! я использую ie9.

Ответы [ 2 ]

2 голосов
/ 18 июля 2012

JavaScript работал нормально. Страница выглядит точно так же, а javascript выглядит так, как будто он не работает, но все работает так, как задумано.

Вот что происходит ...

Пользователь нажимает кнопку. JavaScript выполнен. Заданное время установлено и начинается время. Runat = "server" теперь отправляет сообщения на сервер (однако время ожидания все еще сокращалось) Код для события OnClick объектов запускается на сервере (страница перестраивается на стороне сервера). Новый поток ответов отправляется в браузер клиента. Клиентский браузер перехватывает его и отображает «новую» страницу, сбрасывающую javascript для новой страницы (это новая страница ASPX, которую вы просили!).

Таким образом, даже runat = "server" в другом элементе формы остановит выполнение методов settimeout или setinterval.

IMO - лучший способ написания кода - использовать AJAX на стороне клиента для публикации значений на вашем сервере, перехватывать их на странице на сервере, создавать свои html или javascripts и отправлять их обратно в браузер клиента для отлова и либо замените innerHTML идентификатора элемента, либо оцените javascript ... меньше накладных расходов, быстрее, лучше, более изящно и гораздо больше контроля. Вы можете использовать stringbuilder, если вы используете .NET для создания фрагментов HTML, поскольку это намного быстрее, чем объединение нескольких строк.

надеюсь, это поможет.

2 голосов
/ 24 ноября 2011

Пожалуйста, попробуйте:

window.setTimeout(function () { alert('hello'); }, 1250);
...