代码之家  ›  专栏  ›  技术社区  ›  Brian Stinar

Safari JavaScript问题

  •  2
  • Brian Stinar  · 技术社区  · 15 年前

    我目前正在为我的公司(LeaderTechnologies)开发一个JavaScript程序,该程序用于为Logitech注册产品。其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">

    非常感谢你们抽出时间来帮助我。我非常感谢这个网站上提供的所有帮助。

    -布莱恩·J·斯蒂纳-

    2 回复  |  直到 15 年前
        1
  •  1
  •   Andris    15 年前

    我认为这是野生动物中的一种虫子-例如,如果你这样做的话 .focus() 不适用于DIV,但对于另一个输入元素(如文本字段),单击选择框后,两者都将获得焦点(或者实际上,焦点将停留在选择框中,而文本框似乎只有通过具有比平时更厚的边框才能获得焦点)。

    不管怎样,要实现这个目标,快速而肮脏的方法是从页面中删除selectbox(display:none),然后将其返回(display:inline)。

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

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

    如果不使用延迟,那么它就不起作用——元素的删除和检索需要在不同的范围内。

        2
  •  5
  •   Butifarra    15 年前

    不要选择你的风格,但是像你这样把听众串联起来并不是很干净。为什么不利用jquery处理任何浏览器差异的能力呢?您引用的页面已在加载中。

    http://docs.jquery.com/Events/bind