2009-12-14 62 views
4

我遇到了一個我寫的jQuery腳本問題,這讓我有點瘋狂。像往常一樣,它在Firefox中完美運行,但在所有IE版本中都會出現問題。jQuery點擊功能在IE中不起作用

我有以下的HTML。它是利用速度所產生,所以應該是屬於DOM的一部分:

<select name="groups" id="groups" type="select"> 
<option value="group1">group1</option> 
<option value="group2">group2</option> 
<option value="group3">group3</option> 
</select> 

我的jQuery腳本是這樣的:

jQuery(document).ready(function() { 
    jQuery("#groups option").click(function() { 
     alert(group); 
     var group = jQuery(this).attr("value"); 
     AJS.safe.ajax({ 
      url: "/plugins/userlookup/userlookup.action", 
      type: "POST", 
      dataType: "json", 
      data: { 
       group: group 
      }, 
      success: function(data) { 
       alert(data); 
       jQuery("#users").empty(); 
       for(var i=0; i < data.userList.length; i++) { 
        var userstr = "<option value=\""+data.userList[i]+"\">"+data.userList[i]+"</option>"; 
        jQuery("#users").append(userstr); 
       } 
      } 
     }); 
    }); 
}); 

基本上有一個下拉「羣體」的名單,並在選擇一個組AJAX調用是從該組獲取用戶並填充另一個字段。在IE中,選擇組什麼都不做,也沒有給出任何Javascript錯誤。我試圖通過它,但看起來像「點擊」功能根本沒有綁定到任何元素,因爲沒有任何這些警報被調用,並且斷點在調試器中從未被擊中。我已經嘗試直接在瀏覽器中調用AJAX URL,但與Firefox不同,我沒有得到JSON輸出,IE嘗試下載操作並失敗。

我已經遍歷了Firefox和後端代碼中的所有代碼,這一切都工作。

任何人都可以看到我做了什麼可能是錯的?

回答

4

嘗試使用change事件而不是點擊事件。也就是說,當選擇被改變時,然後用相關數據更新你的用戶選擇。另請注意,更改以從組中選擇選項(this將成爲選擇而不是選項)。

jQuery(document).ready(function() { 
    jQuery("#groups").change(function() { 
     var group = jQuery(this).find(':selected').attr('value'); 
     AJS.safe.ajax({ 
       url: "/plugins/userlookup/userlookup.action", 
       type: "POST", 
       dataType: "json", 
       data: { 
         group: group 
       }, 
       success: function(data) { 
         alert(data); 
         jQuery("#users").empty(); 
         for(var i=0; i < data.userList.length; i++) { 
           var userstr = "<option value=\""+data.userList[i]+"\">"+data.userList[i]+"</option>"; 
           jQuery("#users").append(userstr); 
         } 
       } 
     }); 
    }); 
}); 

我認爲,實際上並不在IE瀏覽器中產生的選項元素click事件,它是在選擇自身產生。不過,如果您使用的是多重選擇,雖然看起來不是您自己,但這可能會有所不同。

+0

非常感謝,這工作很好! – jenny 2009-12-14 01:48:08

+0

'select-many'也沒有腳本選項。這兩種選擇在IE中都是不可分割的小部件,因此您只有極少的腳本編寫機會。在任何情況下,HTML和DOM標準都沒有提及表單字段的內部,所以不建議依賴它們。 – bobince 2009-12-14 02:33:27

0

順便說一下,除了使用change事件......如果一個用戶名可以具有在&<性格,你有一個錯誤的和潛在的跨站點腳本安全漏洞,從你那裏卡住字符串與HTML一起沒有適當的逃避。

基於字符串的方法也效率不高,因爲jQuery每次調用它時都必須創建並丟棄一個選擇包裝。避免使用字符串中的內容創建動態HTML;在適當的地方使用DOM方法以及jQuery。例如:

var options= $('#users')[0].options; 
options.length= 0; 
for(var i= 0; i<data.userList.length; i++) 
    options[i]= new Option(data.userList[i]); 

...比字符串黑客變體更短,更快,更容易閱讀和更安全。

0

此外,在我的情況下,可能的原因是Internet Explorer增強安全配置(ESC)。默認情況下,Windows 2008 Server上已啓用該功能。 To disable, see this