如何将对象参数传递给Javascript函数

时间:2013-05-09 07:16:49

标签: javascript

有很多关于将参数传递给Javascript的帖子,但似乎没有解决我的问题。因此,我希望你能帮助我。

我有一个字符串对象(实际上它是一个时间),但似乎只允许整数传递给函数

这可能是语法问题吗?

displayBidder += "<button class='btn'><a href='javascript:void(null);' onClick='decline(" + obj.Data[i].jobid + ", " + obj.Data[i].bidtime + ") '>Decline</a></button>"

function decline(jobid, time){

    alert(time);

}

$("#display").html(displayBidder);

1 个答案:

答案 0 :(得分:0)

  

我有一个字符串对象(实际上它是一个时间),但似乎只允许整数传递给函数

没有。但是数字(和布尔值,null和undefined)是唯一的原语,如果它们被字符串化,它们将为自己产生eval uable值。做console.log(displayBidder)以查看您正在制作的HTML。如果id是数字,它将成为

<button … onClick='decline(1, 2) '>Decline</button>

但如果它们是字符串,它将成为

<button … onClick='decline(one, two) '>Decline</button>

(这是变量!)如果使用(非数组)对象,它甚至可以

<button … onClick='decline([object Object], [object Object]) '>Decline</button>

这意味着您需要正确序列化值以便可以解释它们。 JSON.stringify可以做到这一点,但有一个更好的解决方案:

使用适当的事件处理程序。内联事件属性被拒绝,尤其是在由js创建的情况下。相反,使用

$("#display")
  .html(displayBidder)
  .append($("<button class='btn'>Decline</button>").on("click", /*(function(i) {
       return*/ function(event) {
           alert( obj.Data[i].jobid );
           // and do whatever you want
       }/*;
   })(i)*/));

如果在循环中使用此代码段并且执行处理程序时i已更改,则取消注释IEFE。有关解释,请参阅JavaScript closure inside loops – simple practical example