keydown事件和click事件的功能相同

时间:2014-05-22 21:39:29

标签: jquery onclick this keydown

我试图弄清楚如何触发相同的jQuery函数,点击一个锚标签或按下L键。

这是起点:

jQuery('body').on('click','.jm-post-like',function(event){
    event.preventDefault();
    heart = jQuery(this);
    post_id = heart.data("post_id");
    jQuery.ajax({
       [NOTE: inside here there is some code using the variable 'heart'!]
    });
});

在这种情况下,heart指的是'.jm-post-like'。要将该代码嵌套在函数中,我必须更改该var:

function likesystem(event) {
    heart = jQuery('.jm-post-like');
    post_id = heart.data("post_id");
    jQuery.ajax({
        .....
    });
}

jQuery('.jm-post-like').on('click', function(event) {
    event.preventDefault();
    likesystem(event);
});    

jQuery(document).keydown(function(event) { 
    if (event.keyCode == 76) { // L key code
        likesystem(event);
    }
});

我必须说它工作正常,除了那些有多个'.jm-post-like'的页面。我已经尝试使用thisthat建议here,但是如果是keydown this则会引用jQuery(文档)!

jQuery(document).keydown(function(this) { 
    if (event.keyCode == 76) { // L key code
        likesystem(this);
    }
});

我对jQuery并不十分热衷,所以非常感谢任何建议;)

1 个答案:

答案 0 :(得分:1)

你需要告诉它哪一个。

您可以使用事件目标。

function likesystem(event) {
    heart = jQuery(event.target);

或者你可以使用它,但你需要使用事件冒泡

jQuery(document).on("keydown", ".jm-post-like", function(event) { 
    if (event.keyCode == 76) { // L key code
        likesystem(this);
    }
});

但如果他们没有焦点元素,按下“L”键实际上没有任何意义。