1

我正在一个网站上单击 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 中运行良好。

4

1 回答 1

1

这有效:http: //jsbin.com/uruhiz/2/edit

解决方案是在 mousedown 上检查单元格是否更改,并且在第二种情况下不阻止默认值。

更新:

带输入的版本:http: //jsbin.com/uruhiz/4/edit

带有下拉菜单的版本:http: //jsbin.com/eriyuw/2/edit

于 2012-06-29T10:22:50.553 回答