IE和Mozilla Firefox之间的Javascript行为差异?

时间:2010-01-07 18:01:56

标签: c# asp.net javascript firefox internet-explorer

我有以下代码,应该更新标签,说“请稍候..”,然后运行一个功能,然后再次更新标签,说它已经完成:

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

这在IE中运行良好,但在Firefox中不行。

当我在Firefox中运行它时,标签在过程完成之前不会改变。

有没有办法在运行C#函数之前强制javascript更新页面?

5 个答案:

答案 0 :(得分:5)

innerText属性是Internet Explorer的专有功能。在Firefox和其他DOM兼容的浏览器中,使用textContentlink)。

以下代码将测试浏览器支持哪个属性并使用适当的属性:

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

如果您的网站涉及大量JavaScript,我强烈建议您使用jQuery等第三方库来处理这些浏览器不兼容问题。

答案 1 :(得分:3)

你为什么不试试:

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

为了避免在不同的浏览器中放入不同的代码,我建议你使用jQuery。

$('#errorMessage').html('Please Wait...');

答案 2 :(得分:2)

onclientclickinnerText不是标准DOM属性。使用onclicktextContentinnerHTML。或者更好的是,使用jQuery:

$('#Button1').click(function() {
    $('#errorMessage').text('Please Wait...');
});

答案 3 :(得分:0)

如果您想使用标准DOM方法而非非标准(且略有不同)innerTexttextContent属性:

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

显然这是非常冗长的,并且可能比innerHTML替代方案慢。

答案 4 :(得分:-1)

不幸的是,JavaScript的行为在不同浏览器的某些细节中非常有用。以下是我的建议:使用jQuery

jQuery的专家们已经做了大量的工作来平滑这些差异,以及其他许多陷阱。