0

我正在用 Javascript 制作纸牌游戏,网页所做的其中一件事是创建带有卡片名称的按钮,您可以单击以使用该卡片。至少,在理论上。

代码:

function addButton(card) {
    var newbutton = document.createElement("input");

    newbutton.setAttribute("type", button);
    newbutton.setAttribute("id", 'someButton');
    newbutton.setAttribute("value",card.displayName);
    newbutton.setAttribute("name",card.name);
    newbutton.setAttribute("onclick",'useCard(name)'); ///this is what's not working

我想要的是 onclick 属性使用命名卡(卡的名称是 card.name,它可能与其显示的名称不同)。相反,它使用 useCard 和 'name' 作为参数,这显然是错误的。这里正确的代码行是什么?

4

4 回答 4

3

添加事件侦听器将是一个更好、更简洁的选择:

newbutton.addEventListener('click', function () {
  useCard(this.getAttribute("name"));
});

如果你真的需要支持 IE < 9,你必须先检查addEventListener兼容性,并attachEvent在不支持前者的情况下使用:

// generic helper function
function addEventListenerX(elem, evt, listener) {
  if ("addEventListener" in window) {
    elem.addEventListener(evt, listener);
  }
  else {
    elem.attachEvent("on" + evt, listener);
  }
}


addEventListenerX(newbutton, 'click', function () {
  useCard(this.getAttribute("name"));
});

如果您已经在使用 jQuery 或原型之类的 JS 框架,请使用他们的侦听器系统。他们会自动为您添加兼容性。

于 2013-10-03T19:58:41.173 回答
1

替换这个:

newbutton.setAttribute("onclick",'useCard(name)'); ///this is what's not working

有了这个:

if (newbutton.addEventListener) {
    newbutton.addEventListener('click', function() { useCard( card.name ); });
else {
    newbutton.attachEvent('onclick', function() { useCard( card.name ); });
}
于 2013-10-03T19:59:30.093 回答
0

尝试这个:

 newbutton.setAttribute("onclick",'useCard("' + card.name + '")');
于 2013-10-03T19:58:29.643 回答
0

Use this

 newbutton.setAttribute("onclick",'useCard('+card.name+')'); 

in place of

 newbutton.setAttribute("onclick",'useCard(name)'); 
于 2013-10-03T20:00:16.920 回答