我正在一个网站上点击一个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中运行良好。
答案 0 :(得分:1)
这有效: http://jsbin.com/uruhiz/2/edit
解决方案是检查mousedown是否更改了单元格,并在第二种情况下不防止默认。
<强>更新:强>
带输入的版本: http://jsbin.com/uruhiz/4/edit
带下拉菜单的版本: http://jsbin.com/eriyuw/2/edit