2009-10-09 92 views
0

我想添加一個onKeyPress事件動態創建的HTML元素使用JavaScript。實際上,添加元素,分配id,添加innerHTML,但onmouseover,onmouseout和onKeyPress(倒數第二行)事件不會添加到元素中。最後一行(.focus())確實有效。JavaScript的onKeyPress分配問題

代碼:

function newParagraphAfter(elem) 
{ 
blockElemId++; 
newPara = document.createElement("p"); 
newPara.id = 'block_' + blockElemId; 
newPara.contentEditable = 'true'; 
newPara.onmouseover = "this.style.border='1px dashed white';"; 
newPara.onmouseout = "this.style.border='none';"; 
newPara.innerHTML = "Edit Here!"; 
elem.parentNode.insertBefore(newPara, elem.nextSibling); 
document.getElementById('block_' + blockElemId).onKeyPress = "return editKeypress(this, event)"; 
document.getElementById('block_' + blockElemId).focus(); 
} 

任何幫助非常感謝,

尼科

回答

1

小寫的onkeypress事件,並使用功能

document.getElementById('block_' + blockElemId).onkeypress = function(e) { 
    if(!e) e = event; 
    return editKeypress(this, event) 
}; 

編輯:新增bobince的建議爲更多的跨瀏覽器友好的回答。

+0

非常感謝Gordon,我總是想知道那些匿名函數的含義是什麼。 – 2009-10-09 21:56:15

+1

由於全局'window.event',這隻適用於IE。在其他地方,事件作爲處理函數的參數傳遞。你應該設置'newPara.onkeypress = editKeypress',並在'editKeypress'中檢查一個參數。即。傳統上:'function editKeypress(e){if(!e)e = window.event; ...' – bobince 2009-10-09 23:37:20

2

我不認爲你可以分配字符串事件處理程序 - JavaScript可以強制數據,但不是這個程度。你需要做的是寫你的代碼作爲一個函數,然後將該函數分配給事件處理函數