[英]Change onClick attribute with javascript
這是我的函數,它應該改變 HTML 輸入的 onClick 屬性,但如果我使用
document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)";
它根本不起作用,但如果我使用
document.getElementById('buttonLED'+id).onclick = writeLED(1,1);
該函數自行執行! 任何想法在單擊按鈕之前,我必須使用什么代碼來更改 onCLick 屬性而不執行該函數?
如果重要的話,這是完整的功能:
function showLED(id){
if(color == 0){
document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)";
document.getElementById('buttonLED'+id).value="light is on";
//document.getElementById('buttonLED'+id).disabled = false;
}else{
document.getElementById('buttonLED'+id).onclick = "writeLED(1,0)";
document.getElementById('buttonLED'+id).value="light is off";
//document.getElementById('buttonLED'+id).disabled = false;
}
}
好吧,只要這樣做,你的問題就解決了:
document.getElementById('buttonLED'+id).setAttribute('onclick','writeLED(1,1)')
祝你有美好的一天XD
您想要這樣做 - 設置一個將被執行以響應 onclick 事件的函數:
document.getElementById('buttonLED'+id).onclick = function(){ writeLED(1,1); } ;
你正在做的事情不起作用,因為:
onclick 事件處理程序期望有一個函數,在這里您要分配一個字符串
document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)";
在此,您將執行 writeLED(1,1) 函數的結果分配為 onclick 事件處理程序:
document.getElementById('buttonLED'+id).onclick = writeLED(1,1);
onclick = writeLED(1,1)
這行表示要立即執行函數 writeLED(arg1, arg2),參數為 1, 1 並分配返回值; 您需要創建一個將使用這些參數執行並分配它的函數。 最上面的答案給出了一個例子 - 另一個是使用 bind() 函數,如下所示:
var writeLEDWithSpecifiedArguments = writeLED.bind(this, 1,1);
document.getElementById('buttonLED'+id).onclick = writeLEDWithSpecifiedArguments;
使用 Jquery 而不是 Javascript,使用'attr'
屬性而不是'setAttribute'
喜歡
$('buttonLED'+id).attr('onclick','writeLED(1,1)')
您實際上並沒有更改功能。
onClick
被分配給一個函數(這是對某個東西的引用,在這種情況下是一個函數指針)。 傳遞給它的值無關緊要,不能以任何方式使用。
另一個問題是您的可變color
似乎無處不在。
理想情況下,你應該把這個邏輯放在函數內部,讓它弄清楚要寫什么。 (開/關等)
另一種解決方案是將“onclick”屬性設置為返回 writeLED 函數的函數。
document.getElementById('buttonLED'+id).onclick = function(){ return writeLED(1,1)};
當您在 JavaScript 中創建尚未在瀏覽器中繪制的元素時,這對於其他情況也很有用。
首先,我們將使用查詢選擇器選擇所需的按鈕,對於所有選定的按鈕,我們將使用需要通過單擊按鈕調用的函數設置onclick
屬性。 您可以通過單擊定義的函數中的按鈕來編寫所需工作的代碼。
那么您的問題的“一個”通用解決方案可以通過以下代碼實現:
var a=document.querySelectorAll('button');
for(b=0;b<a.length;b++)
{
a[b].setAttribute("onclick","check("+b+")");
}
function check(e)
{
var sa=a[e].innerHTML;
console.log('working onclick',sa);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.