4

我想更改 div 内的按钮 onclick 功能。HTML代码如下

<div class="buttons-set" id="payment-buttons-container">
    <button type="button" class="button" onclick="payment.save()" id="payment_button"></button>
</div>

我正在使用以下原型将 onlick 函数 payment.save() 更改为其他内容。

if(payment_method=='gate') {
   var e = $$('div#payment-buttons-container button.button');
   e.setAttribute('onclick','return false;'); // not working
} else {
    var e = $$('div#payment-buttons-container button.button');
    e.setAttribute('onclick','payment.save();'); // not working
}

哪个不起作用并说“未捕获的类型错误:对象 [object HTMLButtonElement] 没有方法'setAttribute'”但是当我通过静态获取按钮的 id 来使用此代码时,它的工作

if(payment_method=='gate') {
    $('payment_button').setAttribute('onclick','return false;');// Works
}
else {
    $('payment_button').setAttribute('onclick','payment.save();');// Works
}

其中“payment_button”是我使用的按钮的 ID。

4

1 回答 1

10

问题是$$()返回与 CSS 选择器匹配的元素列表

如果您只想要与选择器匹配的第一个元素,请尝试此操作

if(payment_method=='gate') {
   var e = $$('div#payment-buttons-container button.button')[0];
   e.setAttribute('onclick','return false;'); // not working
} else {
   var e = $$('div#payment-buttons-container button.button')[0];
   e.setAttribute('onclick','payment.save();'); // not working
}

如果您想将其应用于 CSS 选择器匹配的所有元素,请使用该invoke()方法以这种方式进行

if(payment_method=='gate') {
   $$('div#payment-buttons-container button.button').invoke('writeAttribute','onclick','return false;');
} else {
    $$('div#payment-buttons-container button.button').invoke('writeAttribute','onclick','payment.save();'); // not working
}

我使用的原因writeAttribute()setAttribute()PrototypeJSwriteAttribute()方法,并且可以在 PrototypeJS 支持的所有浏览器上工作,setAttbribute()是标准方法并不总是可用。

于 2013-02-01T20:05:49.840 回答