2011-04-25 86 views
0

另一個跨瀏覽器問題。JS功能不適用於IE的複選框值

JS邏輯:
如果一個特定複選框被選中,該依存者自動 反之亦然檢查,如果該複選框未被選中,這也取決於未選中:

function changeStatusCheckBox(statusCheckbox) { 
    if (statusCheckbox.id == "id1") { 
     if (statusCheckbox.checked == true) { 
      document.getElementById("id2").checked = true; 
      document.getElementById("id3").checked = true; 

     } 
     else { 
      document.getElementById("id2").checked = false; 
      document.getElementById("id3").checked = false; 

     } 
    } 
} 

FF OK - 立即檢查/取消選中。
IE7點擊其他瀏覽器區域後,選中/取消選中作品。
它看起來像IE期望額外的blur行爲。

JS從這個.jsf叫:

<h:selectBooleanCheckbox id="id1" 
value="#{payment.searchByPaymentCriteria}" onchange="javascript:changeStatusCheckBox(this);"/> 

對此你有何看法?

感謝您的協助。

回答

2

Internet Explorer和其他一些瀏覽器也是這樣工作的。 onchange事件僅在模糊發生併發生更改時纔會調用。文本輸入和選擇組合也是這樣的。

使用複選框crossbrowser完成此操作的更好方法是將其綁定到onclick事件。 onclick在mouseup事件之後被調用,所以當調用該函數時,複選框狀態(選中或不選)將被更改。

只是不喜歡

<h:selectBooleanCheckbox id="id1" value="#{payment.searchByPaymentCriteria}" onclick="javascript:changeStatusCheckBox(this);"/> 
+0

我會嘗試這一點,並給你的反饋 – sergionni 2011-04-25 19:26:26

+0

謝謝你,我應該更細心 – sergionni 2011-04-25 19:32:13

+0

@sergionni,很高興它的工作:) onchange事件可能會非常棘手 – 2011-04-25 19:37:35

0

我喜歡這樣的方式是陷阱只能在IE中點擊事件,模糊/聚焦的複選框。這將觸發IE中的更改事件,並且您可以繼續將更改事件用於支持它的其他瀏覽器。點擊是不一樣的,並可能引入其他問題。 (示例使用jQuery中的$ .browser,並假定jQuery包含在頁面中。)相同的示例適用於單選按鈕(替代品:radio for:複選框)。

function fixIEChangeEvent(){ 
    if ($.browser.msie && $.browser.version < 9) { 
     $("input:checkbox").bind("click", function() { 
      this.blur(); 
      this.focus(); 
     }); 
    } 
}