2012-10-17 13 views
5

Jak mogę sprawdzić, czy przeglądarka obsługuje atrybut HTML5 form na elementach input?Wykryj wsparcie dla HTML5 <input form = ""> atrybut

Po this question, próbowałem następujące:

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

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

    return false; 
} 

... ale to daje fałszywe negatywne dla Firefox (14, przynajmniej). Zastępowanie input.form z daje fałszywy alarm dla IE 9.

+0

ordinarliy, sugeruję modernizr dla tego rodzaju rzeczy, ale wygląda na to, że nie zawierały testu dla tego. Ho hum. – SDC

+0

@SDC - Zgadzam się - w obu przypadkach! – Chowlett

+0

Jeśli uda Ci się uzyskać test działania, rozważ wniesienie go do usługi Modernizr. :) – SDC

Odpowiedz

6

dla elementów wejściowych nie było odniesienia do postaci dominującej przed funkcji referencyjnej forma HTML5 i to powoduje ten problem można wymienić.

Mam nadzieję, że jest bardziej elegancki sposób, aby sprawdzić, czy jest obsługiwane, ale teraz można użyć następujących (ale to wiąże się relacje z 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; 
} 
+0

Wygląda obiecująco - brzmi z tym, co mówi @Gaby w swojej odpowiedzi. Dam ci szansę, i dam ci znać, jeśli to zadziała. – Chowlett

+0

Wstępne testy są dobre. Wymaga pełnego przetestowania (a IE nie lubi document.childNodes [0] .appendChild, ponieważ childNodes [0] jest znacznikiem html, ale możemy to obejść!), Ale zdecydowanie wygląda dobrze. – Chowlett

+0

Miałem 'body' w miejsce' childNodes [0] ', może pomóc. – Sev

0

Nie sądzę, że to takie proste.

Według specyfikacji na http://dev.w3.org/html5/spec/association-of-controls-and-forms.html#attr-fae-form

  1. Właściciel forma musi istnieć, aby być ustawiony na elemencie.
  2. Element musi być w dokumencie w celu zmiany jego właściciela, tworzą
+0

Aha. To sugeruje jednak dalszą drogę. Czy mogę dodać formularz do dokumentu, dodać po nim 'hidden'' input' i spróbować zmienić atrybut 'form' tego elementu? Następnie wyczyścić? – Chowlett

Powiązane problemy