我在我的HTML代碼以下DIV:CONTENTEDITABLE DIV裏面跨度標籤需要按鍵事件
<div id="expanderInput" tabIndex="1" contentEditable></div>
我使用的是CONTENTEDITABLE DIV爲使可自動展開的文本框的簡單,跨瀏覽器的方法。我也在做什麼用戶進入這個div輸入驗證。它應該是由逗號分隔的電子郵件地址列表。當用戶嘗試提交不正確的信息時,我的javascript會將輸入分塊,並以紅色突出顯示所有不正確的分塊。
//split the address into the comma-separated chunks
var chunks = splitForward(forwardsTo);
//Grab each bad chunk one at a time and stick it in a span with a red-colored text
for(var i = 0; i < invalids.length; i++)
{
var current = chunks[invalids[i]];
current = '<span class="highlighted">' + current + '</span>';
chunks[invalids[i]] = current;
}
$("#expanderInput").html(chunks.join());
initHighlighted();
數組'invalids'包含所有壞塊的索引。到目前爲止,一切正常。但是一旦用戶開始在紅色文本中輸入內容,我需要紅色消失,但只是在該範圍內。例如,如果有兩個不正確的塊,每個都以紅色突出顯示,並且用戶開始修復一個,另一個需要保持紅色。
我已經試過事件偵聽器連接到跨度:
initHighlighted = function()
{
$(".highlighted").keypress(function()
{
alert("It works!");
});
};
但事件不會發生,甚至當用戶編輯紅色的文字。使用瀏覽器的開發者工具,我可以看到事件處理程序在那裏,它從未出現過。它是div上的contentEditable屬性導致跨度接收事件嗎?我也嘗試將這些跨度本身設爲contentEditable,但行爲仍然相同。
是啊,我在想了一會兒,如果聽衆甚至被附着,但最絕的是。我發現如果用戶總是立即開始輸入並且只有一個紅色字段,那麼使用.focus()將會起作用。換句話說,它不是真正的解決方案。 我跟着你的鏈接,它給了我最終使用的解決方案 - 只使用選擇API來獲得我想要的節點。不是我想要的,但最終完成了工作。我不知道我在搜索時沒有找到那個。雖然謝謝! – JDC 2010-08-25 08:42:35