Разница в поведении JavaScript и IE и Mozilla Firefox - PullRequest
0 голосов
/ 07 января 2010

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

<asp:Button ID="Button1" runat="server" Text="Upload"
                    onclientclick="document.getElementById('errorMessage').innerText='Please Wait...';" 
                    onclick="Button1_Click"  />

Это прекрасно работает в IE, но не в Firefox.

Когда я запускаю его в Firefox, метка не меняется до тех пор, пока процесс не завершится.

Есть ли способ заставить javascript обновить страницу перед запуском функции C #?

Ответы [ 5 ]

5 голосов
/ 07 января 2010

Свойство innerText является проприетарной функцией Internet Explorer. В Firefox и других браузерах, совместимых с DOM, используйте textContent ( ссылка ).

Следующий код проверяет, какое свойство поддерживается браузером, и использует соответствующее:

var node = document.getElementById('errorMessage');
var errorMessage = 'Please Wait...';
if (typeof node.innerText !== 'undefined')
  node.innerText = errorMessage;
else
  node.textContent = errorMessage;

Если на вашем сайте много JavaScript, я настоятельно рекомендую использовать стороннюю библиотеку, такую ​​как jQuery , которая позаботится об этих несовместимостях браузера.

3 голосов
/ 07 января 2010

Почему бы вам не попробовать:

document.getElementById('errorMessage').innerHTML = 'Please Wait...'

И чтобы не помещать разные коды в разные браузеры, я бы посоветовал вам использовать jQuery.

$('#errorMessage').html('Please Wait...');
2 голосов
/ 07 января 2010

onclientclick и innerText не являются стандартными атрибутами DOM. Используйте onclick и textContent или innerHTML. Или еще лучше, используйте jQuery:

$('#Button1').click(function() {
    $('#errorMessage').text('Please Wait...');
});
0 голосов
/ 08 января 2010

Если вы хотите сделать это стандартными методами DOM, а не нестандартными (и слегка различающимися) свойствами innerText и textContent:

var el = document.getElementById('errorMessage');
while (el.firstChild) {
    el.removeChild(el.firstChild);
}
el.appendChild( document.createTextNode('Please Wait...') );

Очевидно, что это довольно многословно и, вероятно, будет медленнее, чем альтернатива innerHTML.

0 голосов
/ 07 января 2010

К сожалению, поведение JavaScript очень детально в разных браузерах. Вот мое предложение: используйте jQuery .

Эксперты jQuery проделали огромную работу, чтобы сгладить эти различия и многие другие подводные камни, кроме того.

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