【发布时间】:2011-04-03 13:36:59
【问题描述】:
我的 html 代码中有以下 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,但行为仍然相同。
【问题讨论】:
标签: javascript html dom-events keypress contenteditable