2010-10-14 9 views
6

Sto analizzando una risposta JSON tramite $.ajax() e costruendo un modulo dai valori di questo oggetto. Lo script che ho scritto è lunga, ma ecco quello che sta facendo:jQuery .attr ('tipo', 'invio') su un elemento pulsante mi dà uno strano errore in IE7

  1. dinamicamente la creazione:
    ~ un elemento del modulo,
    ~ un elemento fieldset,
    ~ un elemento pulsante,
    ~ 20 o così ingressi di testo e elementi dell'etichetta

  2. aggiungendo l'input e le etichette al fieldset

  3. Aggiunta il pulsante per il Fieldset

  4. Aggiunta fieldset alla forma

  5. Aggiunta forma di un elemento del DOM esistente.

Tutto funziona in tutti i browser tranne uno snippet in IE. L'ho ristretto al seguente pezzo di codice. (doc è una variabile contenente document)

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

Questo è il passo 3 dall'alto. Crea un elemento pulsante, aggiunge una classe, imposta l'attributo type su submit, gli assegna del testo e quindi lo aggiunge al fieldset. IE non riesce con l'errore "Oggetto non supporta questa azione"

Se commento fuori la linea .attr() in questo modo:

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

Tutto funziona come previsto.

Se vi state chiedendo, il metodo .button() è jQuery UI

+0

Cosa succede se si 'doc.createElement()' in primo luogo, assegna il tipo di semplice JS e quindi trasformarlo in un oggetto jQuery? Solo per scoprire in quale fase si trova il problema? –

+1

Puoi pensare di usare un template jQuery [motore] (http://github.com/nje/jquery-tmpl) - [esempio] (http://weblogs.asp.net/scottgu/archive/2010/ 05/07/jquery-templates-and-data-linking-and-microsoft-contributing-to-jquery.aspx) –

+0

Buona idea John. Pekka, per la risposta di Nick sembra essere jQuery-By-Design. – Stephen

risposta

10

jQuery doesn't allow you to change the type of an <input> or <button> element.

Il motivo di ciò è la coerenza e IE non consente di modificare type una volta che è stato inserito nel DOM.

+1

Interessante! Non lo sapevo. Come si crea dinamicamente un ''? – Stephen

+0

Tecnicamente non l'ho ancora inserito nel DOM ... – Stephen

+4

@Stephen - Corretto, ma jQuery lo disattiva in tutti i casi, anche se IE sarebbe ok nel tuo esempio. Per creare l'elemento basta crearlo con l'elemento html: '$ ('

0

jQuery non consente di modificare l'attributo type su un elemento pulsante esistente perché IE genera un errore quando si tenta di farlo.

Tuttavia, si può provare qualcosa di simile (usando jQuery 1.4 di più concisa sintassi creazione elemento):

fieldset.append(
    $('<button>', {'type': 'submit', 'class': 'ui-button', 'html': 'Re-Rate'}).button() 
); 
+1

Non puoi creare un elemento come questo, la sintassi non è valida, e se lo fosse genererebbe un errore. Non è possibile avere attributi nella stringa HTML * e * l'oggetto proprietà (provalo :)). –

+0

Whoops, ho aggiornato la mia risposta in modo che funzioni ora. – gabriel

Problemi correlati