我目前正在为我的公司(Leader Technologies)开发一个用于注册Logitech产品的Javascript程序。其URL是: http://wwwtest.onlineregister.com/logitechreg/

我的程序在我尝试过的除Safari 4之外的所有单个网络浏览器(包括IE 6)上看起来都很好。在Safari 4上,在选择了位置,语言和产品类别后,点击实际产品菜单时( id = WHPR),显示负责显示产品的div,但下拉选项仍然可见。在所有其他浏览器上,隐藏中的下拉列表和可能的选择(这是预期的行为。)

直接,我的问题是我可以在Safari 4中成功隐藏此下拉列表而不会完全清空下拉列表,然后仅使用所选值重新填充它吗?如果可能的话,我宁愿不这样做,但如果这是实现我的目标的唯一方法,那么我可以另外更改网站。

我认为问题出在我在<select>

上设置监听器的地方

<select id="WHPR" class="ui-formulate-ignore" style="width: 280px; visibility: visible;" onchange="whprChanged(this);" onfocus="displaySelector(form, document.getElementById('WHPR')); document.getElementById('imageHolder').focus(); this.blur();" name="WHPR">

非常感谢您抽出宝贵时间来帮助我。我非常感谢本网站提供的所有帮助。

-Brian J. Stinar -

有帮助吗?

解决方案

我认为这是Safari中的某种错误 - 例如,如果您为DIV执行.focus() nof但是对于像文本字段这样的其他输入元素,那么在点击选择框之后两者都会有焦点(或实际上,焦点将保留在选择框中,文本框似乎只有比平时更厚的边框才能获得焦点。

无论如何快速和肮脏的methot实现目标将是从页面中删除选择框(显示:无)然后将其恢复(显示:内联)。

使用以下命令替换this.blur()

this.style.cssText='display:none';var select = this; window.setTimeout(function(){select.style.cssText='display:inline';},1);

如果您不使用延迟,则它不起作用 - 元素的删除和检索需要在不同的范围内。

其他提示

不要挑选你的风格,但像你正在做的那样将听众内联在一起并不是很干净。为什么不利用jQuery处理任何浏览器差异的能力?您引用的页面已经加载它。

请参阅 http://docs.jquery.com/Events/bind

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top