Javascript 需要帮助传递$(this)以进行.on(“单击”)回调吗

Javascript 需要帮助传递$(this)以进行.on(“单击”)回调吗,javascript,jquery,Javascript,Jquery,这是我第一次使用函数回调,而不是使用匿名函数来处理on.(“click”)事件。console.log将对象键显示为未定义,如果我将$(this)ass传递给回调参数,它将不起作用 谁能帮我把这件事弄清楚吗。任何帮助都将不胜感激 function getFreelancersInfo(elem){ var id = elem.attr("id"); /*@div_wrapper stores arbitrary data about the freelan

这是我第一次使用函数回调,而不是使用匿名函数来处理on.(“click”)事件。console.log将对象键显示为未定义,如果我将$(this)ass传递给回调参数,它将不起作用

谁能帮我把这件事弄清楚吗。任何帮助都将不胜感激

   function getFreelancersInfo(elem){

        var id = elem.attr("id");
        /*@div_wrapper stores arbitrary data about the freelancer and also acts as a wrapper for
         *each freelancer  */
        var div_wrapper = $("div#"+id);

        var freelancer_info_obj = {

            first_name  : div_wrapper.attr("data-first-name"),
            last_name   : div_wrapper.attr("data-last-name"),
            email       : div_wrapper.attr("data-email")

        };

        //TODO create and send welcome email

        console.log(freelancer_info_obj);

        return false;
    }



    $(".approve").on("click",getFreelancersInfo()  );

您需要将函数引用作为click回调传递,其中
this
将引用事件所针对的元素

function getFreelancersInfo() {
    //here this refers to the clicked element
    var elem = $(this);
    var id = elem.attr("id");
    /*@div_wrapper stores arbitrary data about the freelancer and also acts as a wrapper for
     *each freelancer  */
    var div_wrapper = $("div#" + id);

    var freelancer_info_obj = {

        first_name: div_wrapper.attr("data-first-name"),
        last_name: div_wrapper.attr("data-last-name"),
        email: div_wrapper.attr("data-email")

    };

    //TODO create and send welcome email

    console.log(freelancer_info_obj);

    return false;
}



$(".approve").on("click", getFreelancersInfo);

如果您不想更改方法
getfrequelersinfo
,则可以使用具有处理程序的匿名函数,该处理程序可以调用
getfrequelersinfo

function getFreelancersInfo(elem) {

    var id = elem.attr("id");
    /*@div_wrapper stores arbitrary data about the freelancer and also acts as a wrapper for
      *each freelancer  */
     var div_wrapper = $("div#" + id);

     var freelancer_info_obj = {

         first_name: div_wrapper.attr("data-first-name"),
         last_name: div_wrapper.attr("data-last-name"),
         email: div_wrapper.attr("data-email")

     };

     //TODO create and send welcome email

     console.log(freelancer_info_obj);

     return false;
 }



$(".approve").on("click", function () {
    return getFreelancersInfo($(this))
});

非常感谢你的解释。现在可以了!:)