2012-04-02 89 views
1

我想模擬用戶按下標籤,然後按下Enter鍵進入。我知道這聽起來很糟糕,但我有一個asp.net web應用程序,它只允許我在它上面有一個runat =「server」的表單,所以當用戶點擊返回時,主表單將被提交。我在頁面上有另一個文本框(理想情況下它應該有它自己的形式,但不能,因爲它是asp),並且當從那裏命中enter時,顯然主表單被提交。我能想到的最簡單的方法是模擬選項卡,然後使用javascript輸入,但我一直沒有成功。我歡迎任何其他解決方案來解決這個問題。到目前爲止,我已經模擬了按下標籤,但我不知道如何模擬多個按鍵。在javascript中模擬多個按鍵

這是我到目前爲止的代碼,我想返回9;需要用別的東西來代替。 JQuery也會這樣做。

function suppressEnter (e) { 
    var keyPressed; 
    if (window.event) { keyPressed = window.event.keyCode } // IE 
    else if (e) { keyPressed = e.which }; // Netscape 
    if (keyPressed == 13) { 
     return 9; 
    } 
    else { 
     return true; 
    } 
} 

編輯:返回9 + 13;工作在鉻,但不是IE

+1

'返回9 + 13;'是一樣的話'返回22;',它不不知何故返回兩個值...如果用戶手動按Tab鍵然後進入這種情況會發生什麼?在我看來,你應該直接編碼,而不是試圖模擬擊鍵。如果你正在捕獲keydown事件,請取消Enter鍵的默認行爲,然後執行下一步操作...... – nnnnnn 2012-04-02 10:06:35

回答

0

像這樣的工作:

function keyPress(e) { 
    if (e.which == 13) { 
     $(document).trigger(jQuery.Event('keydown', {which: 9})); 
     // do something 
     alert('Enter') 
    } 
    if (e.which == 9) { 
     // do something 
     alert('Tab'); 
    } 

}; 

$(document).bind("keydown", keyPress); 

我編寫它的小提琴 - http://jsfiddle.net/FAe6U/


此外至於@nnnnnn評論:

在我看來,你的肩膀d只是直接編碼,而不是嘗試使用 來模擬按鍵。

試試這個:

var tabPress; 
function keyPress(e) { 
    if (e.which == 13) { 
     if (tabPress == 1){ 
      e.preventDefault(); 
      alert('tab and enter'); 
     } 
     else{e.preventDefault(); alert('enter')} 
    } 
    else if (e.which == 9) { 
     e.preventDefault(); 
     tabPress = 1; 
    }; 
}; 

function keyRelease(){tabPress = 0;} 
$(document).bind("keydown", keyPress); 
$(document).bind("keyup", keyRelease); 

我編寫它的小提琴 - http://jsfiddle.net/f4Ybn/

+0

感謝您的詳細解答,但我採取了不同的方法。我在後面的代碼中添加了這個模擬點擊第二個按鈕:RemindEmail.Attributes.Add(「onkeypress」,「javascript:if(event.which || event.keyCode){if((event.which == 13)||(event.keyCode == 13)){document.getElementById('「+ SendPasswordReminderButton.ClientID +'').click(); return false;}} else {return true};」); ' 我擔心模擬標籤,然後輸入可能導致輸入鍵上的無限循環。你可以編輯第二種方法來合併這種方法,但這種方法非常簡單。 – Andrew 2012-04-02 13:13:17