2009-10-14 74 views
1

我在網頁上有一個允許編輯文本的java小程序。當用戶嘗試修改文本時,按退格按鈕,瀏覽器轉到上一頁。如果過濾器退格按像將退格鍵按下事件傳遞給小程序並阻止它傳播

var a = function() { 
     var event = window.event; 
     if (event.keyCode == 8){ 
      alert('backspace'); 
      return false; 
     } 
} 
document.onkeydown = a; 

然後backspace不傳播到小程序,因此不會修改文本。 問題是如何將事件傳遞給小程序ant stop進一步傳播?

+0

你在函數中缺少一個關閉'}'。錯字? – 2009-10-14 11:41:52

+0

謝謝,更正 – kilonet 2009-10-14 12:15:47

回答

1

現在我發現在使用jQuery sendkeys plugin解決方案。由於在我們的項目中使用jQuery不是一個選項,我會嘗試用純JavaScript重寫它。

+0

我想知道sendkeys使用什麼方法... – Kev 2009-10-20 17:02:12

+1

它使用一些複雜的操作與隱藏的textarea模擬按鍵 – kilonet 2009-10-21 06:55:05

+0

哇,好的,好吧,我很高興你知道了,有時候IE真的讓我很沮喪...... – Kev 2009-10-21 13:17:29

0
if (event.keyCode === 8) 
{ 
    var newEvent = document.createEvent('KeyboardEvent'); 
    newEvent.initKeyEvent(                      
       "keypress",  // in DOMString typeArg,               
        true,    // in boolean canBubbleArg,               
        true,    // in boolean cancelableArg,              
        null,    // in nsIDOMAbstractView viewArg, Specifies UIEvent.view. This value may be null.  
        false,   // in boolean ctrlKeyArg,                
        false,   // in boolean altKeyArg,               
        false,   // in boolean shiftKeyArg,              
        false,   // in boolean metaKeyArg,              
        8,    // in unsigned long keyCodeArg,              
        0);    // in unsigned long charCodeArg); 
    document.getElementById('myjavaapplet').dispatchEvent(newEvent); 
} 
+0

請注意,iniKeyEvent是「Gecko特定的; DOM 3事件工作草案使用initKeyboardEvent」(https://developer.mozilla.org/en/DOM/document.createEvent) – Kev 2009-10-14 15:13:47

+0

我正在編程爲IE 。由document.createEventObject返回的Event對象沒有方法'initKeyboardEvent' – kilonet 2009-10-16 13:11:08

0
if (event.keyCode === 8) 
{ 
    var newEvent = document.createEvent('UIEvents'); 
    newEvent.initUIEvent('keypress', true, true, window, 1); 
    newEvent.keyCode = 8; 
    document.getElementById('myjavaapplet').dispatchEvent(newEvent); 
} 
+0

根據IE8 JS調試器事件對象只有以下方法:getAttribute,setAttribute和removeAttribute。我已經嘗試設置initUIEvent中列出的屬性,但它並沒有工作( – kilonet 2009-10-19 07:09:20

+0

哦,哇,標準太多了。 – Kev 2009-10-19 13:29:42

0
// assumes IE8, but you could write detection code based on if (document.createEventObject) 

if (event.keyCode === 8) 
{ 
    var newEvent = document.createEventObject(); 
    newEvent.keyCode = 8; 
    document.getElementById('myjavaapplet').fireEvent('onkeypress',newEvent); 
} 
+0

我已經試過了 - 它也沒有工作 – kilonet 2009-10-20 06:30:38

+0

它錯誤還是隻是沒有做任何事情 – Kev 2009-10-20 17:01:39

+0

它沒有什麼都不做 – kilonet 2009-10-21 06:50:30