5

如何检查浏览器是否支持元素的 HTML5form属性input

这个问题之后,我尝试了以下方法:

var supportForm = function()
{
  var input = document.createElement("input");
  if ("form" in input)
  {
    input.setAttribute("form", "12345");

    if (input.form == "12345")
      return true;
  }

  return false;
}

...但这给 FireFox 带来了假阴性(至少 14 个)。替换input.forminput.getAttribute("form")IE 9 会产生误报。

4

2 回答 2

6

对于输入元素,在 HTML5 表单引用功能之前有对父表单的引用,这会导致您提到的这个问题。

我希望有一种更优雅的方法来检查它是否受支持,但现在您可以使用以下方法(但它涉及与 DOM 的处理):

function testInputFormSupport() {
    var input = document.createElement('input'),
         form = document.createElement('form'),
         formId = 'test-input-form-reference-support';
    // Id of the remote form
    form.id = formId;
    // Add form and input to DOM
    document.childNodes[0].appendChild(form);
    document.childNodes[0].appendChild(input);
    // Add reference of form to input
    input.setAttribute('form', formId);
    // Check if reference exists
    var res = !(input.form == null);
    // Remove elements
    document.childNodes[0].removeChild(form);
    document.childNodes[0].removeChild(input);
    return res;
}
于 2012-10-17T14:58:25.803 回答
0

我不认为这很容易。

根据http://dev.w3.org/html5/spec/association-of-controls-and-forms.html#attr-fae-form的规范

  1. 表单所有者必须存在才能设置为元素。
  2. 该元素必须在文档中才能更改其表单所有者
于 2012-10-17T13:34:19.910 回答