2012-06-12 65 views
0

創建按鈕,我在動態創建JavaScript的一個按鈕,我不能設置該按鈕的動作..無法添加行爲動態在JavaScript

var but = document.createElement("input"); 
but.type = "button" 
but.value = "NewButton"; 
but.onClick = check(); 
var newElement = document.getElementById("addButton"); //span element id 
newElement.appendChild(but); 

功能「複選框()」不叫的時候按鈕被點擊

+2

是什麼由'check()'返回?如果你想檢查被點擊按鈕時調用,刪除括號:'but.onClick =檢查;' – Niko

回答

3

你有2個問題,你的代碼。第一個是事件不是大寫的,第二個是你想把事件分配給函數而不是函數的結果。它應該看起來像:

but.onclick = check; 

這實際上將事件分配給函數的地址,而不是功能的預期效果(這什麼都不做)。

+0

謝謝你,它的工作.. – user25

1

check()執行該函數,並將分配任何函數返回到but.onClick。要將該功能分配給某個事件,請按名稱指定(不包含該父項)。

+0

謝謝你,它的工作.. – user25

0

小CASE onclick

but.onclick = check(); 
0

我認爲你這是要指定爲回調onclick事件需要check功能不恢復功能,那麼

but.onclick = check; 

例如案例:

var check = function() { 
    return function(){ 
     /* some logic eg. dependent of arguments 'parent' function' */ 
    } } 
//works 
but.onclick = check('somethingImportant'); 

好的,但有一個問題,如果你想爲這些事件分配幾個回調:) 這會更好,如果你知道約addEventListener/attachEvent

but.addEventListener('click', check,true); 
but.addEventListener('click', check2,true); 

之後如果需要使用removeEventListerdetachEvent來分離功能;

但是 - 嘗試用jQuery :)

var check = function(){/* do something */}; 
     $('#addButton').append(
      $('<input type="button" value="New Button"/>') 
     ).click(check);​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 

$('#addButton').append( 
      $('<input/>').attr('type', 'button').val('New Button')) 
       .click(function(){ /* do something */ }) ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 
    ); 

然後

$('#addButton').unbind( 'click') // unbind('click',check) 

還有更多posibilities玩到這樣做:)

+0

謝謝你Abuduba所有的答案 – user25