在JS当我'alert()'传递给函数的参数的值时,它打印出[object Object],为什么?

时间:2015-11-10 17:52:07

标签: javascript jquery

我正在尝试做的非常简单,我想将字符串值传递给JS函数,以便它可以在通常的警报弹出窗口中显示它们。 这是HTML:

<div class="clickit" onclick="myfun('dog','cat')"> Hello </div>

这是JS:

('.clickit').click(function myfun(){
    var i=0;
    for(i=0;i<arguments.length;i++){
        alert(arguments[i]);
    }
});

不幸的是它无法正常工作,它打印出来:[object Object]。

此外,即使有2个参数,它也只循环一次。 我遵循了这里描述的内容:w3schools,但它无效。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:9)

没有公共名称myfun的功能。事件处理程序中的函数是一个命名函数表达式,因此该名称仅在该函数内可用。 click属性中的代码将崩溃,您可以在错误日志中找到该错误消息。

当函数被调用为事件处理程序时,只有一个参数;事件对象。

要使用事件中的参数调用函数,您需要一个命名函数:

function myfun(){
  var i=0;
  for(i=0;i<arguments.length;i++){
    alert(arguments[i]);
  }
}

然后你可以从click属性中调用它:

<div class="clickit" onclick="myfun('dog','cat')"> Hello </div>

或者您可以从调用函数的代码绑定事件处理程序:

$('.clickit').click(function(){
  myfun('dog','cat');
});

演示:

&#13;
&#13;
function myfun(){
  var i=0;
  for(i=0;i<arguments.length;i++){
    alert(arguments[i]);
  }
}

$('.clickit').click(function(){
  myfun('dog','cat');
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div onclick="myfun('dog','cat')"> Hello </div>

<div class="clickit"> Hello </div>
&#13;
&#13;
&#13;