有很多关于将参数传递给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);
答案 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