我正在制作一个Intranet应用程序并尝试使用jQuery的Jeditable插件。以下函数使一个元素(在本例中为td元素)可单击,然后将其变为可编辑(在这种情况下也可选择,因为它是一个选择框)并检查一个键监听器以查看是否已按下tab或shift-tab激活下一个或上一个可编辑区域。
$('.editBool').editable(function(value, settings){
// show and hide clickable links. shouldn't be important to problem,
// but i don't know at this point
$(this).parent().find('a.editbutton').hide();
$(this).parent().find('a.savebutton').show();
$(this).parent().addClass('notSaved');
// sets a warning if they leave the page without saving edited data
window.onbeforeunload = savePage;
// needed for editable to work (apparently).
return(value);
}, {
data : "{'Yes':'Yes','No':'No'}",
type : 'select',
onblur : 'submit',
callback : function(value, settings) {
// kp is the keypress, sp is a bool checking for the shift key
if (kp == 9){if (sp){$(this).prev().click();}else{$(this).next().click();}kp = null;}
}
});
如果我使用这样的代码选中Jeditable框,我就没有问题,直到我在Internet Explorer(7和8)中移动鼠标。如果当前选定的元素是一个选择框(使用上面的代码),当鼠标移动时,选择框将失去焦点并触发onblur事件。如果鼠标没有移动,焦点将保持在选择框中。
如果我使用游标尝试选择其他值,焦点也会丢失,并且会再次触发onblur事件。
这种情况不会发生在我设置为Jeditable(textarea,autogrow textarea,蒙面文本)的任何其他元素上,仅适用于选择,并且仅在IE 7-8中(也可能是6,但我不是'不再关心6)。它的工作原理我预计它可以在FF3,Chrome 4 +,Opera 10中工作(鼠标移动时焦点停留在选择框上,键盘箭头命令可以选择选项)。
有没有人对为什么会发生这种情况有任何想法?
感谢。
澄清时间:当使用next()函数从jeditable启用的td设置更改为text,textedit或autogrow on click,到jeditable启用的td设置为on时,会发生此错误 一个选择框。从文本到文本或选择文本时不会发生。
更多细节时间:在jeditable jQuery插件中调用focus()时出现错误,第253行:
$(':input:visible:enabled:first', form).focus();
似乎在此行之后移动鼠标,会导致选择框失去焦点。这让我疯了,因为我想解决这个问题,我一直在以任何方式攻击它。我通过交换前一行来解决这个奇怪的问题:
setTimeout(function() { $(':input:visible:enabled:first', form).focus();}, 1000);
在创建的选择框和焦点设置之间的第二个过程中,如果鼠标移动,一旦设置,焦点就不会丢失。如果在设置焦点之前鼠标没有移动,当它移动时,焦点会丢失。这似乎是完全结果和坚果。我一直在努力解决这个问题,并找不到解决方案。非常感谢任何帮助。
谢谢,