簡體   English   中英

.each()綁定懸停事件並將變量傳遞給處理函數

[英].each() bind hover events and pass a variable to handler functions

我正在嘗試將懸停事件綁定到某些元素,並通過$ .each遍歷它們,其特殊之處是我想將css類名作為懸停的處理函數的參數傳遞,但似乎范圍不是我期望一個。 我試圖

$(document).ready(function () {
    var $madewithLabels = $("#made-with .label");

    // Binding
    $madewithLabels.each(function (index) {
       // get bootstrap css classname for the current element in the loop
       var bsClass = getHoverClass($(this));
       console.info("css class is: " + bsClass + " - " + typeof(bsClass));

       $(this).hover(
           function (bsClass) {
               console.info(bsClass);
               $(this).addClass(bsClass);
           },
           function (bsClass) {
               console.info(bsClass);
               $(this).removeClass(bsClass);
           }
       );
    });
});
  • 第一個console.info:當事件綁定時(在准備好文檔的情況下),getHover()獲取正確的CSS類名稱(字符串)
  • 2rd / 3rd console.info:當執行懸停的處理程序函數時bsClass是一個對象(我想這是一個jQuery)

我已經這樣解決了:

$(document).ready(function () {
    var $madewithLabels = $("#made-with .label");

    // Binding
    $madewithLabels.each(function (index) {
        $(this).hover(
            function () {
                $(this).addClass(getHoverClass($(this)));
            },
            function () {
                $(this).removeClass(getHoverClass($(this)));
            }
        );
    });
});

但是我的問題是...

使用$(this)是正確的解決方案嗎?

為什么當我將字符串變量傳遞給處理函數時,調用該函數時會得到一個對象? 是因為某種類型的轉換? 是因為關閉范圍?

感謝jQuery專家回答!

您在懸停回調中得到的是一個Event對象,如docs所述

handlerIn

類型:函數(Event eventObject)

當鼠標指針進入元素時執行的功能。

因此,在您的第一個示例更改中:

function (bsClass) {

對此:

function () {

因此,您將繼續使用之前計算的原始bsClass

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM