我有以下代码,应该更新标签,说“请稍候..”,然后运行一个功能,然后再次更新标签,说它已经完成:
<asp:Button ID="Button1" runat="server" Text="Upload"
onclientclick="document.getElementById('errorMessage').innerText='Please Wait...';"
onclick="Button1_Click" />
这在IE中运行良好,但在Firefox中不行。
当我在Firefox中运行它时,标签在过程完成之前不会改变。
有没有办法在运行C#函数之前强制javascript更新页面?
答案 0 :(得分:5)
innerText
属性是Internet Explorer的专有功能。在Firefox和其他DOM兼容的浏览器中,使用textContent
(link)。
以下代码将测试浏览器支持哪个属性并使用适当的属性:
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)
onclientclick
和innerText
不是标准DOM属性。使用onclick
和textContent
或innerHTML
。或者更好的是,使用jQuery:
$('#Button1').click(function() {
$('#errorMessage').text('Please Wait...');
});
答案 3 :(得分:0)
如果您想使用标准DOM方法而非非标准(且略有不同)innerText
和textContent
属性:
var el = document.getElementById('errorMessage');
while (el.firstChild) {
el.removeChild(el.firstChild);
}
el.appendChild( document.createTextNode('Please Wait...') );
显然这是非常冗长的,并且可能比innerHTML
替代方案慢。
答案 4 :(得分:-1)
不幸的是,JavaScript的行为在不同浏览器的某些细节中非常有用。以下是我的建议:使用jQuery。
jQuery的专家们已经做了大量的工作来平滑这些差异,以及其他许多陷阱。