2014-11-06 4 views
2

Рассмотрим следующий код JS (нажмет на asp.net Button при загрузке):Почему window.onload игнорирует обратную передачу?

function doSomething() 
{ 
    document.getElementById("<%= theButton.ClientID %>").click(); 
} 
window.onload = doSomething; 

Когда страница загружается - отделенного кода кнопки выполняется, и страница загружается снова (с новой информацией). Этот должен ввел ошибку бесконечного цикла, но это не так. Он вызывается только один раз и игнорируется в обратной передаче.

Почему?

+0

Как перезагружается страница? что вы подразумеваете под этим –

+0

Почему вы не используете метод '_doPostBack()' из Javascript? – LcSalazar

+0

@EkanshRastogi Это вещь asp.net - когда выполняется код, страница получает [postback] (http://en.wikipedia.org/wiki/Postback). – ispiro

ответ

0

Предполагая, что вы хотите метод doSomething называть только первый раз загружается страница:

Вы должны добавить вызов doSomething на страницу с помощью Page.RegisterStartupScript в коде позади, но обернуть его в если утверждение, что проверяет, является ли это обратной передачей. Таким образом, ваш метод будет называться только в первый раз, когда загружается страница:

if(!Page.IsPostBack) 
{ 
    Page.ClientScript.RegisterStartupScript(GetType(), "buttonClickScript" "window.onload = doSomething;", true); 
} 
+1

Он спрашивает, почему нет бесконечной петли, а не как ее исправить. – Stilgar

+0

Я основывал это на комментарии OPs: «Я хочу знать, могу ли я полагаться на это, не создавая бесконечный цикл». Выполняя это таким образом, вам не нужно полагаться на него, не создавая бесконечный цикл. Я бы предположил, что описанное поведение связано с тем, что сценарий OPs выполняется до того, как скрипт _postback сгенерирован asp.net и прикреплен к кнопке. Я бы не полагался на него, я бы контролировал поток страниц из кода на стороне сервера. – Keith