2016-09-28 71 views
0

要啓動onclick事件,我有這個獲取元素的ID與(這)

[].forEach.call(btnAddVendorDropDown, (btnAddVendorDropDown) => { 
    btnAddVendorDropDown.addEventListener('click', onAddVendorDropDownClick, false); 
}); 

功能是

function onAddVendorDropDownClick(e) { 
    e.preventDefault(); 

    addNewClass(modal, 'is-active'); 
    addNewClass(modalAddVendorDropDown, 'is-active'); 

    const test = $(this).attr('id'); 
    console.log(test); 
    return test; 
} 

所以我想要做的是當用戶點擊btnAddVendorDropDown,函數onAddVendorDropDownClick被調用。我需要從元素中獲取id。當我從函數內部執行元素屬性idconsole.log時,我得到了我所需要的。我遇到的問題是當我嘗試從功能外抓取它時,我一直在收到undefined。我不明白我是如何從這個函數外部調用這個函數的時候獲得這個id的。

我想這

var num = onAddVendorDropDownClick(); 
console.log("the function return is " + num); 

這是什麼顯示undefined

+2

您使用的一個非常奇怪的香草JS和jQuery的組合。 – Soviut

+0

你可以通過'this.id'來獲得id;無需在jQuery中包裝。 –

+0

你可以做'var num = onAddVendorDropDownClick.call(btnAddVendorDropDown);',但是我認爲你想用一個函數做太多。 –

回答

2

this直接與調用者的範圍相關。這意味着如果沒有將範圍「綁定」到事件處理函數中,this將引用您的主應用程序範圍,而不是您在鏈接函數時jquery傳遞的範圍。

您可以包裹事件對象的target

function onClickHandler(e) { 
    $(e.target).attr('id'); 
} 

或者您也可以點擊處理程序的jQuery的範圍內使用$(this)

$( '#我的按鈕')上( 'click',函數(e){(this).attr('id'); });

最後一個例子的工作原理是因爲它發生在JQuery閉包內部,所以它保留了前一個函數的作用域。在關閉之外,this意味着別的東西。

+0

這可能會引起誤解,因爲目標可能是您想要的元素的子元素 – charlietfl

+0

確實如此,但包裝目標可讓您輕鬆實現jQuery DOM遍歷,以便在需要時查找父項。 – Soviut

+0

只是指出它 – charlietfl

0

$(this)是JQuery的上下文,而你在JavaScript函數裏面。您可以更改點擊按鈕jQuery來使用它:

var test; 
 
$("button").click(function(){ 
 
    test = $(this).attr('id'); 
 
    console.log(test); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<button id="btnTeste"> 
 
    Teste 
 
    </button>