Safari Javascript问题

时间:2009-11-28 20:37:43

标签: javascript html safari

我目前正在为我的公司(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 -

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

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

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

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

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

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