jQuery文本输入忽略鼠标,下拉列表无法正常工作

时间:2012-06-29 08:40:20

标签: jquery

我正在一个网站上点击一个td单元格创建一个文本输入(或选择/选项下拉列表),该文本输入被设置为td的当前值,文本输入被赋予焦点。

这个版本允许人们点击td将内容放入文本输入,可能编辑它,然后按Enter或点击其他地方或更改窗口以模糊它并将其保存到td:

http://jsbin.com/emuneq/7/edit#source

问题是点击发生在鼠标上,并且模糊发生在mousedown上,因此自动调整大小的表在mousedown和鼠标之间发生变化。

通过单击第一个黄色单元格(它在释放鼠标时创建文本字段),然后在单元格2上缓慢单击并释放鼠标,可以看到这一点。当您按下鼠标时,前一个文本字段为模糊,这会调整表格单元格的大小,当你释放时,你现在在单元格3中。对于单击工作,mousedown和mouseup的对象必须相同,但是鼠标在单元格2中向下,鼠标向上在单元格中3,所以没有检测到点击。

此版本使用mouseup事件:

http://jsbin.com/emuneq/8/edit#source

如果单击单元格1,然后单击单元格2上的模糊(模糊前一个文本字段),则保持在单元格3上鼠标悬停的相同位置,并在单元格3中创建文本字段。

我想要发生的是在调整表格列之前,在mousedown上创建文本字段。

此版本使用mousedown事件:

http://jsbin.com/emuneq/13/edit#source

我添加了“e.preventDefault();”对于mousedown函数 - 如果不存在,则模糊函数会阻止mousedown工作。

“focus()”允许您在文本字段的左侧键入文本或按删除,但它似乎完全忽略鼠标单击以移动光标或选择文本...尽管您可以移动文本光标使用箭头键。

在IE7和IE8中,它检测到你按下了回车键,但在使用鼠标给出文本输入焦点之前,你最初不能输入任何内容。使用鼠标,您还可以突出显示文本或移动文本光标。

但是在IE9和Firefox 11中,文本输入忽略了鼠标。在Chrome 19中,focus()突出显示文本,但它也完全忽略了鼠标。

无论如何,上一个链接几乎是完美的,只是它忽略了文本字段中的鼠标(IE7和IE8除外)。

以下是使用select / option下拉列表而不是文本字段的版本:

http://jsbin.com/emuneq/15/edit#source

这与以前一样使用了mousedown - 但是IE9,Firefox和Chrome中的下拉列表根本不会打开。它们在IE7和IE8中运行良好。

1 个答案:

答案 0 :(得分:1)

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

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

<强>更新:

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

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