将参数传递给javascript函数失败

时间:2011-12-22 11:06:32

标签: javascript closures

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事件中调用的函数。如果我传递的是一个数字(整数),那么它可以工作,如果我通过了 字符串它说参考错误。它与闭合有关我猜。如何解决它。 发生什么事实在这里?

3 个答案:

答案 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>

在语法方面完全正确。

我想,你现在明白了。

干杯,