-1

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

1 回答 1

0

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

不,但是数字(以及布尔值、null 和 undefined)是唯一的原语,eval如果它们被字符串化,它们将为自己产生一个可用的值。做一个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 闭包 - 简单实用的示例进行解释

于 2013-05-09T07:39:28.797 回答