2015-07-02 59 views
10

我有一個在複選框字段中的onclick事件中調用的函數。通過函數獲取元素的標識

<input type='checkbox' checked='' onclick='return changeEnable();' id='someid'> 

和功能

function changeEnable() 
{ 
    var val = $(this).attr('id'); 
    alert(val); 
} 

我有但它返回undefined。我的語法錯了還是錯過了一些東西?

這些複選框是動態創建的,並具有不同的ID,這就是爲什麼我想獲得某個任務的ID。

回答

19

請注意,您的changeEnable函數中的this將是window。你需要通過參考元素作爲參數傳遞給函數:

<input type='checkbox' checked='' onclick='return changeEnable(this);' id='someid'> 
function changeEnable(el) { 
    var val = el.id 
    alert(val); 
} 

或者,作爲改進,使用Javascript功能來連接你的事件較好的分離的擔憂:

<input type="checkbox" id="someid"> 
$(function() { 
    $('#someid').change(function() { 
     var val = this.id 
     alert(val); 
    } 
}); 

請注意,上述使用複選框的change事件,這對於可訪問性原因更好。

+0

哇。作品完美。感謝您的提醒。我會在計時器後選擇這個答案:)謝謝! – jackhammer013

+0

沒問題,很樂意幫忙。 –

+0

很好的答案,upvoted。對於那些新來的JS(在這種情況下是JQuery)並且想要使用JS事件,對於這種情況你顯然沒有ID,所以你想要爲生成的輸入分配一個類'',並使用'$('。myInputClass')'。 – MasNotsram

4

我認爲這個代碼將有助於這種方式UA很多

<input type='checkbox' checked='' onclick='return changeEnable(this);' id='someid'>` 
function changeEnable(thisobj) 
{ 
    var val = thisobj.id; 
    alert(val); 
} 
+0

不要忘記'changeEnable'函數中的參數。 –

+0

謝謝!如果我只能選擇這個。 – jackhammer013

+1

請解釋爲什麼這會有所幫助。 – curiousdannii

2

使用:

<input type='checkbox' checked='' onclick='changeEnable(this);' id='someid'> 
function changeEnable(el) 
{ 
    var val = el.id; 
    alert(val); 
} 
+0

爲什麼這個工作? – curiousdannii

+0

它的工作,試試吧。我只使用JavaScript。 –

+0

將你的答案與Rory的答案進行比較,Rory的實際解釋了代碼的工作原理。 – curiousdannii

3

你也應該知道.CALL方法會拋出輸入上下文起作用。

<input type='checkbox' checked='' onclick='changeEnable.call(this);' id='someid'> 

function changeEnable() 
{ 
    var val = this.id; 
    alert(val); 
}