function test() {
var id = 123;
var id12 = 'abcd';
var childDiv = "";
childDiv += '<div style="width:20px;height:20px" onclick="newsClicked('+id12+')">Click</div>';
$("#mydiv").append(childDiv);
}
function newsClicked(param) {
alert(param);
}
上面是测试函数,test()是我在测试div的onClick事件中调用的函数。如果我传递的是一个数字(整数),那么它可以工作,如果我通过了 字符串它说参考错误。它与闭合有关我猜。如何解决它。 发生什么事实在这里?
答案 0 :(得分:2)
变化:
childDiv += '<div style="width:20px;height:20px" onclick="newsClicked('+id12+')">Click</div>';
到
childDiv += '<div style="width:20px;height:20px" onclick="newsClicked(\''+id12+'\')">Click</div>';
当您将childDiv
第一个附加到以整数作为参数的div时,结果将为:
<div style="width:20px;height:20px" onclick="newsClicked(3)">Click</div>
这是正确的,如果是字符串,结果将是:
<div style="width:20px;height:20px" onclick="newsClicked(string_as_arg)">Click</div>
这不行,因为string_as_arg
不是最后不在范围内的变量。这就是为什么你应该把它括在撇号中。那么正确的结果将是:
<div style="width:20px;height:20px" onclick="newsClicked('3')">Click</div>
<div style="width:20px;height:20px" onclick="newsClicked('string_as_arg')">Click</div>
所以在整数常量的情况下没有太大的区别,但现在字符串被正确识别为字符串而不是变量。
答案 1 :(得分:1)
当您传递number
时,它会正常工作,因为number
不需要位于quotes
,但string
必须位于quotes
。所以要传递字符串,你应该使用escape
char "\"
类似的东西:
newsClicked(\''+id12+'\')
答案 2 :(得分:1)
关于你的问题,
如何解决它。
*注意:您可以在下面的代码中看到\''+id12+'\'
function test() {
var id = 123;
var id12 = 'abcd';
var childDiv = "";
childDiv += '<div style="width:20px;height:20px" onclick="newsClicked(\''+id12+'\')">Click</div>';
$("#mydiv").append(childDiv);
}
function newsClicked(param) {
alert(param);
}
实际上发生了什么?
newsClicked函数将在最近添加到dom的DIV点击后触发, 它将添加到像
这样的dom<div onclick="newsClicked(abcd)" style="width: 20px; height: 20px;">Click</div>
这里, abcd 与变量一样使用,但实际上并不存在。
你会得到像
这样的错误未定义abcd
但如果您将 id 变量设为整数,则会添加dom,如
<div onclick="newsClicked(123)" style="width: 20px; height:20px;">Click</div>
在语法方面完全正确。
我想,你现在明白了。
干杯,