簡體   English   中英

使用 javascript 更改 onClick 屬性

[英]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); } ;

你正在做的事情不起作用,因為:

  1. onclick 事件處理程序期望有一個函數,在這里您要分配一個字符串

    document.getElementById('buttonLED'+id).onclick = "writeLED(1,1)";
  2. 在此,您將執行 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM