在向web应用程序添加新功能时,我需要动态设置Button对象的值。碰巧我需要在值中放入一些html编码的unicode字符。在实现这一点时,我发现我定义字符的位置决定了它们是否正确显示。如果我在onclick事件本身中定义字符,则字符将正确显示。如果我在函数中或在顶层定义它,它将显示为文本。
我已经将我的问题提炼成以下示例HTML/JS(请注意,我的最终问题是unicode字符,但我使用lt/gt作为示例):
<html><body>
<script type="text/javascript">
var tlabel3 = '> foo <';
function ChangeName2() {
document.getElementById('button2').value = '> foo <';
}
function ChangeName3() {
document.getElementById('button3').value = tlabel3;
}
function ChangeName4(label4) {
document.getElementById('button4').value = label4;
}
</script>
<input type=button id=button1 value="< foo >"> - <a href=# onclick="document.getElementById('button1').value = '> foo <'">Clicky</a>
<HR>
<input type=button id=button2 value="< foo >"> - <a href=# onclick="ChangeName2()">Clicky</a>
<HR>
<input type=button id=button3 value="< foo >"> - <a href=# onclick="ChangeName3()">Clicky</a>
<HR>
<input type=button id=button4 value="< foo >"> - <a href=# onclick="ChangeName4('> foo <')">Clicky</a>
</body></html>
在我的IE8, Safari, Chrome和FF3.6的测试中,这表现相同-按钮1和4,在onclick处理程序中定义的字符,正常工作。按钮2和3,字符在别处定义,显示文字>
字符串。
我的问题是,为什么字符串定义的位置很重要?我有一个工作,但因为所有四个浏览器的工作方式相同,我觉得我错过了一些Javascript的基本工作知识。
谢谢
当使用>和,lt;在HTML级别,它们在那里呈现,因此它们变成了>和<在javascript级别,它只是一个字符串,它不呈现为HTML(javascript)。>
你可以通过改变第一个按钮代码来看到发生了什么:
<a href="javascript:document.getElementById('button1').value = '> foo <'">Clicky</a>
这样,当你悬停链接并检查浏览器状态栏时,你会看到>和<符号,而不是>和和,lt;。这意味着浏览器已经呈现了它,因为它在HTML代码中。
要获得与javascript相同的结果,正确的做法是执行>或者输入> <在javascript。>