2011-09-18 72 views
4

我已經得到了幫助早here與什麼原來是一個傳播問題,但我現在試圖在輸入上使用HTML5 autofocus,現在我的代碼中斷。傳播和Keydown jQuery問題

這裏是我的工作代碼:

<script type="text/javascript"> 
var $j = jQuery.noConflict(); 

$j(':not(form)').keydown(function(event) { 

    $j('form').keydown(function(event) { 
     event.stopPropagation(); 
    }); 

    if(event.keyCode==82) { 
     $j(document).trigger(location.href = '/?random') 
    } 
}); 
</script> 

基本上,我有一些鍵盤導航設置。如果您按下R,它會將您帶到隨機頁面。

我試圖在用戶在表單/輸入框中輸入時禁用該功能,原因很明顯。此代碼有效,除非我嘗試使用自動對焦。如果您開始在頁面加載中正確輸入,並且您輸入的第一個字母是R,則它會轉到隨機頁面。

如果先輸入另一個字母,則R會以正常字母輸入。我是一個新手在這個東西,所以任何幫助非常感謝!謝謝。

編輯:經過進一步測試,看起來問題可能不是自動對焦,但主要是當第一個字母輸入是R時,它會出錯。

回答

0

您的選擇器與「不」是不正確的。

<script type="text/javascript"> 

$(document).ready(function(){ 
    $('body').keydown(function(event) { 
     if(event.keyCode==82) { 
      $(document).trigger(location.href = '/?random') 
     } 
    }); 
    $('input, textarea').keydown(function(){ 
     event.stopPropagation(); 
    }); 
}); 
</script> 
+0

'event.stopPr opagation()'真的停止了事件,加入'return false'會做'event.preventDefault();' – Rafay

+0

stopPropagation不會停止事件。它阻止事件冒泡樹。 – gislikonrad

+0

已更新的答案。 – jancha

0

問題是,每次在任何其他元素上調用keydown時,都會向表單元素添加一個keydown事件。

嘗試了這一點。我改變了你的JS有點...

http://jsfiddle.net/CAjNR/1/

下面是來自小提琴代碼:

HTML:

<form> 
    <input type="text" autofocus /> 
    <input type="text" /> 
    <input type="text" /> 
    <input type="text" /> 
    <textarea></textarea> 
    <div id="results"> 
    </div> 
</form> 

JS

var $j = jQuery.noConflict(); 

$j(document).keydown(function(event) { 
    var key = event.keyCode | event.which; 
    if(key==82) { 
     $j('#results').append($j('<div>pressed: r</div>')); 
    } 
}); 
$j('input, textarea').keydown(function(event) { 
    event.stopPropagation(); 
}); 
+0

'event.keycode | event.which'可能需要是'event.keycode || event.which' –

+0

這實際上沒關係......他們都工作。 – gislikonrad

+0

而你有一個錯字,'event.keyCode'而不是'event.keycode' –