2017-02-10 147 views
0

我一直在試圖讓這個代碼適用於動態crm的多選選項集。我的問題在於,這段代碼在Chrome中毫不費力地工作,完全符合我的要求,但在IE中,.click事件無論如何,如果複選框已選中或未選中,都會返回false。JavaScript .click在IE中不起作用11

所有這些代碼都會將選項集合並將其轉換爲多選列表,並將值設置爲兩個字段「l1s_trainingmodulesvalues」保存所選選項的值,「l1s_trainingmodules」保存所選選項的標籤。

有人可以看看我一直在做錯什麼。

<html><head> 
 
<title></title> 
 
<script src="../WebResources/new_jquery3.1.1.min.js" type="text/javascript"></script> 
 
<script src="ClientGlobalContext.js.aspx" type="text/javascript"></script> 
 
<script type="text/javascript"> 
 

 
     // function will be called when web resource is loaded on Form. 
 
     $(document).ready(function() 
 
     { 
 
      ConvertDropDownToCheckBoxList(); 
 
     }); 
 

 
     //Coverts option list to checkbox list. 
 
function ConvertDropDownToCheckBoxList() 
 
{ 
 
    var dropdownOptions = parent.Xrm.Page.getAttribute("l1s_trainingmodulesoptionset").getOptions(); 
 
    var selectedValue = parent.Xrm.Page.getAttribute("l1s_trainingmodulesvalues").getValue(); 
 

 
    $(dropdownOptions).each(function (i, e) 
 
    { 
 
     var rText = $(this)[0].text; 
 
     var rvalue = $(this)[0].value; 
 
     var isChecked = false; 
 
     if (rText != '') 
 
     { 
 
      if (selectedValue != null && selectedValue.indexOf(rvalue) != -1) 
 
       isChecked = true; 
 

 
      var checkbox = "<label><input type=\"checkbox\" name =\"r\">" + rText + "<br></label>" 
 
      $(checkbox) 
 
       .attr("value", rvalue) 
 
       .attr("checked", isChecked) 
 
       .attr("id", "id" + rvalue) 
 
       .on('click',function() 
 
       { 
 
        //To Set Picklist Select Values 
 
        var selectedOption = parent.Xrm.Page.getAttribute("l1s_trainingmodulesvalues").getValue(); 
 
        alert($(this).is(':checked')); /*** This value always returns false in IE but in Chrome it works perfectly*/** 
 
        if ($(this).is(':checked')) 
 
        { 
 
         if (selectedOption == null) 
 
          selectedOption = rvalue+""; 
 
         else 
 
          selectedOption = selectedOption + "," + rvalue 
 
        } 
 
        else 
 
        { 
 
         var tempSelected = rvalue + ","; 
 
         if (selectedOption != null) 
 
         { 
 
          if (selectedOption.indexOf(tempSelected) != -1) 
 
           selectedOption = selectedOption.replace(tempSelected, ""); 
 
          else 
 
           selectedOption = selectedOption.replace(rvalue, "") 
 
         } 
 
        } 
 
        //alert(rvalue); 
 
        parent.Xrm.Page.getAttribute("l1s_trainingmodulesvalues").setValue(selectedOption); 
 

 
        //To Set Picklist Select Text 
 
        var selectedYear = parent.Xrm.Page.getAttribute("l1s_trainingmodules").getValue(); 
 
        if ($(this).is(':checked')) 
 
        { 
 
         if (selectedYear == null) 
 
          selectedYear = rText+""; 
 
         else 
 
          selectedYear = selectedYear + "," + rText 
 
        } 
 
        else 
 
        { 
 
         var tempSelectedtext = rText + ","; 
 
         if (selectedYear != null) 
 
         { 
 
          if (selectedYear.indexOf(tempSelectedtext) != -1) 
 
           selectedYear = selectedYear.replace(tempSelectedtext, ""); 
 
          else 
 
           selectedYear = selectedYear.replace(rText, ""); 
 
         } 
 
        } 
 
        //alert(selectedYear); 
 
        parent.Xrm.Page.getAttribute("l1s_trainingmodules").setValue(selectedYear); 
 

 
       }) 
 
       .appendTo(checkboxList); 
 
     } 
 
    }); 
 
} 
 
</script> 
 
<meta charset="utf-8"> 
 
</head><body style="-ms-word-wrap: break-word;"><form><div id="checkboxList"> 
 
</div></form> 
 
</body></html>

回答

1

checkbox變量不指checkbox元素。它是一個標籤(var checkbox = "<label><input type=\"checkbox\" name =\"r\">" + rText + "<br></label>"),它沒有選中狀態。

裏面你click處理程序,改變

if ($(this).is(':checked')) 

if ($(this).find('input').is(':checked')) 
+0

你先生搖滾!非常感謝你,這很有魅力。 – shabbzy