2009-11-28 69 views
2

我目前正在爲我公司(Leader Technologies)開發一款用於註冊羅技產品的Javascript程序。造成這種情況的網址是: http://wwwtest.onlineregister.com/logitechreg/Safari Javascript問題

我的程序看起來一切單一的網頁瀏覽器(包括IE 6),我已經試過除了Safari瀏覽器4.在Safari 4中,位置,語言和產品類別都已經選好後完全正常,當點擊實際產品菜單(id = WHPR)時,會顯示負責顯示產品的分區,但下拉選擇仍然可見。在所有其他瀏覽器上,下拉菜單和隱藏在其中的可能選項(這是預期的行爲)。

直接地,我的問題是我可以在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. Stinar-

回答

1

我認爲這是某種在Safari中的錯誤 - 例如,如果你做.focus() NOF的DIV而是像一個文本框另一種輸入元素,然後點擊選擇框後兩者將有焦點(或實際上,焦點將停留在選擇框中,並且文本框似乎只有通過比平常更厚的邊框才具有焦點)。

無論如何快速和骯髒的methot實現目標將刪除選擇框從頁面(顯示:無),然後將其返回(顯示:內聯)。

用下面的命令

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

更換this.blur()如果不使用延遲那麼它不工作 - 元素的去除和檢索需要在不同的範圍。

+0

非常感謝你的建議。這是非常快速和容易實施,並解決了我的問題。我必須解決的一個問題是在cssText =「...」區域放置所有應該影響我感興趣的元素的css(width:280px; display:inline)。我想使用上面的jQuery建議,但是由於我處於時間壓力之下,並且您的解決方案完美運行,所以這就是我最終使用的方法。 由於IE 6 z排序問題,我也不得不稍微修改它。如果我在一秒鐘之後將下拉菜單恢復,IE6將它放在選擇器div上。謝謝。 –

+0

實際上,您不必將所有樣式放入cssText中。所有針對先前聲明的CSS聲明都是附加的,而不是替代 - 因此,術語級聯樣式表中的級聯。 所以,如果你有某個地方聲明輸入應該是280px寬,那麼你不必再聲明它。 – Andris

+0

奇怪的是,寬度被抹去了。 –

5

不要挑剔你的風格,但像你在做的那樣內聯聽衆並不是很乾淨。爲什麼不利用jQuery處理任何瀏覽器差異的能力?您引用的頁面已經加載它。

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

+0

謝謝你的建議。我沒有利用jQuery處理任何瀏覽器差異的能力,因爲我完全沒有意識到jQuery支持該功能。這是我第一個嚴肅的Javascript程序。我仍然熟悉web開發,並且迄今爲止只在Javascript中創建了這個和用戶輸入驗證器。但是,下一次我遇到瀏覽器差異問題時(我越來越多地參與Web開發,很快就會發布),我會仔細研究這一點。非常感謝您的建議和建議。 –