javascript
2013-05-09 68 views -1 likes 
-1

已经有很多关于将参数传递给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

如果您不使用onclick = xxx,而是使用事件侦听器,则这是一个整体清理器。 – jfriend00 2013-05-09 07:19:33

+0

JavaScript接受任何类型作为函数参数。你的代码有问题。 – 2013-05-09 07:20:22

+0

wats'obj.Data [i] .jobid','obj.Data [i] .bidtime'中的值。展示更多代码 – 2013-05-09 07:21:44

回答

0

我有字符串(实际上它的时间)的对象,但似乎只有整数允许被传递到函数

不可以,但数字(和布尔值,空和未定义)是唯一的基元,如果它们被串化,它们将为它们自己产生一个有效值。做一个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)*/)); 

取消对IEFE,如果你在一个循环中使用该片段,并在处理器执行时i发生了变化。有关说明,请参阅JavaScript closure inside loops – simple practical example

相关问题