element2.focus() 在 element1.onblur() 在 Fx/Chrome/Safari 中不起作
element2.focus() fired after element1.onblur() not working in Fx/Chrome/Safari - Salesforce
我在Salesforce(visualforce)上,并使用自定义的自动完成Javascript。我的要求是在从另一个文本字段element1
的建议中进行选择后,立即触发对文本字段element2
的自动完成搜索。
由于我需要能够使用键盘滚动浏览自动建议列表,因此我需要专注于特定字段。我目前正在element2.focus()
在element1
上做出选择并触发element2
上的自动建议搜索。
此外,在这些字段上,当搜索正在运行并且用户手动关注该字段时,自动建议会折叠 - 这表明正在取消搜索。因此,我无法触发搜索然后调用element2.focus()
以下是在不同浏览器中遇到的问题:
Chrome/Firefox 3.5, 4/Safari 5.0.3:
- 从"
element1
"下的建议中选择一个选项 - 字段更改中的值
- 建议折叠
- 场模糊,但不确定焦点在哪里。大概
window
IE 8:
- 从"
element1
"下的建议中选择一个选项 - 字段更改中的值
- 建议折叠
- 场模糊和
element2
聚焦 - 搜索此字段的火灾
此外,上述行为差异仅在我使用鼠标单击进行选择时。使用击键(向上/向下然后输入)时,这在所有浏览器中都按预期工作。在鼠标和键盘选择上执行同一组 JavaScript 方法。
我为此发现的一个有趣的"修复"是在 100 毫秒后使用 setTimeout()
调用element2.focus()
。我猜这是因为element1
的 onblur 正在扰乱element2.focus()
但我并不真正满意使用它。
嗯,有什么想法吗?
代码示例:
//mouseclick handler
function handleMouseClick(event){
element1.value = (event.target)?event.target.textContent:event.srcElement.innerText;
callback();
// kills the children and hides the div containing the suggestions
hideAutoComplete();
}
function callback() {
element2.value = '';
element2.focus();
}
你能使用框架吗?它们确实消除了跨浏览器事件兼容性的痛苦。下面是一个使用 jQuery 的简短示例,它似乎可以做你想要的。任何主要框架都可能同样适用于此。
<html>
<head>
<title>Testing some JS behavior</title>
</head>
<body>
<form id="fooForm">
<label for="a">A: </label><input id="a"/><br />
<label for="b">B: </label><input id="b"/><br />
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script>
$('#b').focus(function(e) {
alert("Focusing on b now.");
});
$('#a').blur(function(e) {
alert("Doing my business on element A.");
$('#b').focus();
// Stop bubbling, just in case this got triggered by them clicking into B
return false;
});
</script>
</body>
</html>
相关文章:
- 在Safari执行javascript之前对其进行修改
- 为什么在变形之前不缺少Fx
- Safari(Mac OS)上的jQuery平滑滚动问题
- $(document).height()在刷新时随机化值(Safari 5.1.10)
- jQuery Datepicker可以在Safari中工作,但不能在FF或Chrome中工作
- document.applet.method在Mounatin Lion上抛出safari 6+JDK7异常
- 主干网.与Safari同步问题
- jQuery表单验证适用于Mozilla和Internet Explorer,但不适用于Chrome或Safari
- 以编程方式选择文本Mobile Safari
- onbeforeunload和asp:Safari和FireFox中的更新面板
- 为什么我的JavaScript在Safari上的严格模式下不能正常工作
- 防止在移动Safari(iPad/iPhone)中长按/长按默认上下文菜单
- 在开始时隐藏FX.slide内容,而不是在单击后隐藏
- 如何在关闭窗口之前在Safari扩展中捕获窗口关闭
- safari扩展中的重定向url
- JS代码在jsbin中有效,在jsfiddle或Chrome/Safari中无效
- SQLite插件适用于Mac和Windows,但不适用于手机上的Safari
- window.open(url).print()在Safari中不起作用
- 无法在Safari中加载跨源映像(来自CloudFront)
- element2.focus() 在 element1.onblur() 在 Fx/Chrome/Safari 中不起作