2011-08-12 67 views
1

我有以下功能點擊時觸發,但我怎麼會也讓它在沒有創建新功能的情況下輸入? (如果可能的話)。同時觸發同樣的功能點擊和按鍵

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

回答

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); 

您可能需要保存和比較事件時間戳雖然以確保您不會調用處理兩次單個選擇。

+0

唯一的問題是,如果有人滾動到頂部,並嘗試重新選擇前一個選項,它不會再次觸發,我希望保持這種狀態。 –

+0

@George:在這種情況下,我只需將代碼放入匿名函數中,並將其與您想要處理的事件綁定即可。 – sje397

+0

@George:編輯。 – sje397

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); 
+0

抱歉:$(「#jump_menu select」)。change(runAnimate);而不是最後的代碼塊 – defuz

+0

謝謝,但沒有任何反應,當我按下輸入。 –

1

你必須在全球範圍內聲明的功能,而不是在你的。點擊功能宣稱它像這樣:

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 

祝你好運!

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