在click和keypress上触发相同的功能

时间:2011-08-12 12:09:23

标签: jquery

我有以下在点击时触发的功能但是如何在不创建新功能的情况下触发输入? (如果可能的话)。

$("#jump_menu select option").click(function(){
    var hash = $(this).val();
    var target_offset = $(hash).offset();
    $('html, body').animate({scrollTop:target_offset.top}, 500);
})  

4 个答案:

答案 0 :(得分:4)

尝试绑定到

$("#jump_menu select").change

...来代替。

或者只需将其移至独立功能并绑定到您需要的内容:

function handler(elem) {
    var hash = $(elem).val();
    var target_offset = $(hash).offset();
    $('html, body').animate({scrollTop:target_offset.top}, 500);
}

$('#jump_menu select option').click(handler);
$('#jump_menu select').change(handler);

您可能需要保存并比较事件时间戳,以确保您不会为一次选择调用两次处理程序。

答案 1 :(得分:1)

你必须全局声明你的功能,而不是像你这样在.click函数中声明它:

function animateBody() {
    var hash = $(this).val();
    var target_offset = $(hash).offset();
    $('html, body').animate({scrollTop:target_offset.top}, 500);
}

之后,您可以将函数绑定到多个事件,而无需重新声明它两次:

$("#jump_menu select option").click(animateBody);
$("#jump_menu select").change(animateBody);

结果看起来像这样:

//Other JQuery/Javascript

function animateBody() {
    var hash = $(this).val();
    var target_offset = $(hash).offset();
    $('html, body').animate({scrollTop:target_offset.top}, 500);
}

$("#jump_menu select option").click(animateBody);
$("#jump_menu select").change(animateBody);

//Other JQuery/Javascript
祝你好运!

答案 2 :(得分:0)

function runAnimate() {
    var hash = $(this).val();
    var target_offset = $(hash).offset();
    $('html, body').animate({scrollTop:target_offset.top}, 500);
}

$("#jump_menu select option").click(runAnimate);  

$('body').change(runAnimate);

答案 3 :(得分:0)

$(selector).on('keyup , change' ,function() {
--- Do some thing ---
});