2017-02-10 146 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