我正在一个网站上单击 td 单元格创建一个文本输入(或选择/选项下拉菜单),该输入设置为 td 的当前值,并且文本输入被赋予焦点。
此版本允许人们单击 td 将内容放入文本输入中,可能对其进行编辑,然后按 enter 或单击其他位置或更改窗口以使其模糊并将其保存到 td:
http://jsbin.com/emuneq/7/edit#source
问题是在 mouseup 上发生了点击,而在 mousedown 上发生了模糊,因此自动调整大小的表格在 mousedown 和 mouse up 之间发生变化。
这可以通过单击第一个黄色单元格(释放鼠标时创建一个文本字段),然后在单元格 2 上缓慢单击并释放鼠标来看到。当您按下鼠标时,前一个文本字段会变得模糊,这调整表格单元格的大小,当您释放时,您现在位于单元格 3 中。为了单击工作,mousedown 和 mouseup 的对象必须相同,但鼠标按下是在单元格 2 中进行的,而鼠标向上是在单元格 3 中,所以未检测到点击。
此版本使用 mouseup 事件:
http://jsbin.com/emuneq/8/edit#source
如果单击单元格 1,然后在单元格 2 上单击鼠标(模糊先前的文本字段),然后保持在相同的位置,它将鼠标悬停在单元格 3 上,并且将在单元格 3 中创建一个文本字段。
我想要发生的是在调整表格列大小之前在鼠标按下时创建文本字段。
此版本使用 mousedown 事件:
http://jsbin.com/emuneq/13/edit#source
我添加了“e.preventDefault();” 到 mousedown 功能 - 如果不存在,则 blur 功能会阻止 mousedown 工作。
“focus()”允许您在文本字段的左侧键入文本或按删除,但它似乎完全忽略了鼠标单击以移动光标或选择文本...尽管您可以使用移动文本光标箭头键。
好吧,在 IE7 和 IE8 中,它会检测到您按下回车键,但您最初无法输入任何内容,直到您使用鼠标为文本输入提供焦点。使用鼠标,您还可以突出显示文本或移动文本光标。
但在 IE9 和 Firefox 11 中,文本输入会忽略鼠标。在 Chrome 19 中,focus() 突出显示文本,但它也完全忽略了鼠标。
无论如何,前面的链接几乎是完美的,只是它忽略了文本字段中的鼠标(IE7和IE8除外)。
这是一个使用选择/选项下拉列表而不是文本字段的版本:
http://jsbin.com/emuneq/15/edit#source
这像以前一样使用 mousedown - 但下拉菜单在 IE9、Firefox 和 Chrome 中根本不会打开。它们在 IE7 和 IE8 中运行良好。