IE8中生成的jQuery值的复选框存储为“on”而不是实际值?

以下示例代码适用于FireFox,但IE导致问题。

此代码实质上根据JSON数组呈现动态复选框列表。

当我尝试提交variblse时,复选框的值存储为“on”。 我注意到有一个额外的属性被渲染(仅限IE),名为jQuery1288631121994,存储真实值。 似乎jquery试图管理复选框的状态,但我似乎无法访问存储的值?

这是我的测试示例:

     var state = { Professions: [1] }; $(document).ready(function () { var data = [{ "ID": 1, "Name": "Football" }, { "ID": 2, "Name": "Cricket" }, { "ID": 3, "Name": "Hockey"}]; $.each(data, function () { var catid = this['ID']; var catname = this['Name']; var selected = $.inArray(catid, state.Professions) != -1 ? true : false; $("
  • ") .append( $("").attr({ id: 'category' + catid , name: 'categories' , value: catid , type: 'checkbox' , checked: selected }) .click(function (event) { //alert($(this)[0].value); }) ) .append( $(document.createElement('label')).attr({ 'for': 'category-' + catid }) .text(catname) ) .append( $("
    ").addClass("clear") ) .appendTo("#ProfSelector ul"); }); $("#btnTest").click(function () { alert($("#ProfSelector input:checkbox:checked").val()); }); });
    Test

    看起来IE似乎不喜欢设置复选框属性的方式; 如果改为以下IE很高兴: http : //jsfiddle.net/tS3cs/

     $("
  • ") .append( '' ) .append( $(document.createElement('label')).attr({ 'for': 'category-' + catid }) .text(catname) ) .append( $("
    ").addClass("clear") ) .appendTo("#ProfSelector ul"); $('#category'+catid).attr('checked',selected);

    我为有兴趣的人找到了解决方案。 这更像是一种解决方法,因为我无法弄清楚它为什么会发生。

    在创建每个输入元素时,而不是在使用jquery 1.4时弹出在IE中刚刚设置为’on’的值字段。 我为每个元素创建了一个val attr并存储了类别id。 然后我只需在提交时调用此代码即可收集结果。

     $(document).ready(function() { $("form").submit(function(){ var str = ""; $("#ProfSelector input:checkbox:checked").each(function () { str += $(this).attr("val") + ","; }); $("form").append( $("").attr({ "type":"text", "name":"selectedCategories", "value":str })); }); }); 

    我发现.map函数对这种情况很有用。 这种用法无需剥离尾随’,’。

     $('#ProfSelector input:checkbox:checked').map(function() { return this.id; // or jquery object // return $(this).val(); }).get().join(',');