這種行爲是完全正確的。如果你看看jQuery的文檔,你會看到:
jQuery on
:
。對(事件[,選擇] [數據],處理器(eventObject)傳遞)
返回:jQuery的
jQuery data
:
。數據(密鑰)
ř eturns:對象
這意味着當您撥打var myObject = $('.btn-place-order').data("confirm-modal");
時將包含data-
屬性的值。
然而,當你調用$(".btn-place-order").on("click", function(e){ $(this).data("confirm-modal"); });
你得到一個jQuery對象返回。這個jQuery對象與$(".btn-place-order")
已經返回的對象是一樣的,這對於使jQuery的chaining
的概念起作用非常重要。
鏈接,您可以在順序執行的幾種方法,沒有得到原來的jQuery對象一遍又一遍。例如$(".btn-place-order").on('click',...).on('hover',...);
將允許您將兩個處理程序(一個click
和一個hover
)連接到相同的元素。
它也沒有意義了on
到別的任何回報,因爲它只是一個附加處理程序的元素。它僅僅因爲你附加了一個事件處理程序而沒有給你任何價值。
現在,如果您想在事件被觸發時採取任何行動,您需要在處理程序的callback
函數中執行該操作。例如。
$(".btn-place-order").on("click", function(e){ alert($(this).data("confirm-modal");) });
將提醒用戶點擊元素的data-confirm-modal
屬性值。但是,如果沒有alert()
部分(即寫入原始代碼的方式),則只讀取該值,但不會執行任何操作。
你的事件處理程序根本沒有做任何事情。它只是訪問「數據」屬性的值,但對此無能爲力。通常,沒有事件處理程序應該/可以**返回任何東西。 – Pointy
你想對數據做什麼? – bfavaretto
@Sergio在HTML5文檔中不是必需的。 – Pointy