2016-11-17 61 views
-2

我有一個jQuery的UI按鈕test-button具有數據屬性。 該按鈕調用一個具有回調函數fnSaveCallback的自定義小部件customWidget如何訪問回調函數內的呼叫者元素

$(".test-button").button({ 
    icons: { 
     primary: 'icon-test icon-mixed icon-custom' 
    }, 
    text: false 
}).customWidget({ 
    id: "custom-widget", 
    title: "My custom widget", 
    fnSaveCallback: function() { 
     // Need to get the data-test attribute from the "test-button" 
    } 
}); 

我在試圖訪問該test-button,以獲得從回調函數的數據屬性的值的問題。 任何想法我怎麼能做到這一點?提前致謝!

+0

你試過這個嗎? – vbguyny

+0

回調函數內的'this'不會讓我訪問按鈕元素,而是訪問customWidget。感謝您的時間;) –

+0

您可以在回調'var test_button = $(「#test-button」)'之外聲明一個變量,然後可以使用回調中的變量來訪問該元素。 – vbguyny

回答

-1

您需要在某處具有該元素的引用。

const test_button = document.getElementById('test-button'); 

,然後在fvSaveCallback:

fnSaveCallback: function() { 
    // Need to get the data-test attribute from the "test-button" 
    console.log(test_button.dataset.test); 
} 

編輯:您的編輯之後,據我理解你正在嘗試這種方法適用於所有.test-button按鈕。 您應該只需要得到節點列表,並遍歷它:)

const test_buttons = document.getElementsByClassName('test-button') 
; 

for (let i = 0; i < test_buttons.length; i++) 
{ const button = test_buttons[i]; //This is the button 
    // Do with 'button' whatever you want here. 
    console.log(button.dataset.some_data); 
} 
+0

所以基本上你建議OP爲頁面中的每個「按鈕」創建一個「const」? – melancia

+0

對不起,我的錯誤...'test-button'不是'id',它是一個類,並且有許多按鈕,並且沒有'id' ... –

+0

他沒有指定完整的問題。 –

0

我發現一個簡單的方法來處理這個問題上的click事件添加類。

$(".test-button").button({ 
     icons: { 
      primary: 'icon-test icon-mixed icon-custom' 
     }, 
     text: false 
    }).click(function() { 
     // remove opener class from other test-buttons 
     $(.test-button.opener).removeClass("opener"); 
     // add opener class to the clicked button 
     $(this).addClass("opener"); 
    }.customWidget({ 
     id: "custom-widget", 
     title: "My custom widget", 
     fnSaveCallback: function() { 
      // Get the data-test attribute from the "test-button" 
      $(".test-button.opener").data("test"); 
     } 
    });