一个按钮元素上的jQuery .attr(’type’,’submit’)在IE7中给出了一个奇怪的错误

我正在通过$.ajax()解析JSON响应,并根据此对象的值构建表单。 我写的剧本很长,但这就是它正在做的事情:

  1. 动态创建:
    〜表单元素,
    〜一个fieldset元素,
    〜一个按钮元素,
    大约20个文本输入和标签元素

  2. 将输入和标签附加到字段集

  3. 将按钮附加到字段集

  4. 将fieldset附加到表单

  5. 将表单附加到现有DOM中的元素。

一切都在所有浏览器中工作,除了IE中的一个小片段。 我把它缩小到下面一段代码。 ( doc是包含document的变量)

 fieldset.append( $(doc.createElement('button')) .addClass('ui-button') .attr('type', 'submit') .html('Re-Rate') .button() ); 

这是上面的第3步。 它创建一个按钮元素,添加一个类,设置要submittype属性,为其提供一些文本,然后将其附加到fieldset。 IE失败并显示错误“对象不支持此操作”

如果我注释掉.attr()行,如下所示:

 fieldset.append( $(doc.createElement('button')) .addClass('ui-button') //.attr('type', 'submit') .html('Re-Rate') .button() ); 

一切都按预期工作。

如果你想知道, .button()方法是jQuery UI

jQuery 不允许您更改元素的类型 。

原因是一致性,IE不允许您在将type插入DOM后更改type

jQuery不允许你修改现有按钮元素的type属性,因为当你尝试这样做时IE会抛出一个错误。

但是,您可以尝试这样的事情(使用jQuery 1.4更简洁的元素创建语法):

 fieldset.append( $('