2010-05-09 10 views
5

Sto provando a creare un pulsante utilizzando jquery. Io uso il seguente codiceIE 7 non piace jquery ('<button/>') .attr ('tipo', 'pulsante')

jquery('<button/>', {type:'button'}).text(name) 

Tuttavia questo funziona in Safari, FF IE8 ma non IE7

ho cercato di utilizzare la funzione attr:

jquery('<button/>').attr('type','button').text(name) 

questo non funziona neanche.

qualche idea su cosa funzionerebbe? Suppongo che se non si assegna un tipo che sarebbe default pulsante ma io piuttosto farlo

grazie per il vostro aiuto

+0

Un '

+4

In realtà [pulsante] (http://www.w3.org/TR/html401/interact/forms.html#h-17.5) il valore predefinito è type = submit. Il pulsante – Tgr

+2

ha un attributo type, type = button, type = submit e type = reset – salmane

risposta

5

Prova questa:

var button = $('<button type="button"/>'); 

Ora, come accade, il tipo predefinito per i pulsanti è "pulsante" comunque in IE (7, almeno, non è sicuro su standard-mode 8). Tuttavia, quanto sopra dovrebbe funzionare. Mi sono imbattuto in questo l'altro giorno. IE ti permette di fornire il tipo proprio lì nella sintassi dell'elemento durante la creazione di elementi, e sembra che jQuery stia passando il suo argomento direttamente all'API DOM di basso livello qui.

Oh, e funziona bene anche in FF e Chrome.


modificare — bene quello che una differenza di un anno fa, eh? Non riesco a far funzionare il meccanismo per me ora con jQuery 1.4.4 o jQuery 1.5.x. La buona notizia è che jQuery 1.6 sembra funzionare come voleva l'OP: tramite l'impostazione di "tipo" in un modo più simile a jQuery.

Ciò che fa sembra funzionare, tuttavia, è chiamare direttamente ".setAttribute()" sull'elemento. Così:

var b = $('<button/>'); 
b[0].setAttribute('type', 'button'); 

fa non gettare un'eccezione, ed è fa impostare il "tipo" attributo correttamente. (Questo è di per sé un po 'bizzarro, dato che Microsoft documenta chiaramente il "tipo" come di sola lettura.) Il cambiamento in 1.6 sembra essere sulla stessa linea. Precedentemente, la libreria controllava "type" e rifiutava esplicitamente di essere impostata su elementi già presenti nel DOM, ma procedeva nel tentativo di impostarla come un semplice attributo per un elemento non nel DOM. Ora, il codice 1.6 chiama ".setAttribute()" per impostare "type", che (per ragioni a me sconosciute) funziona correttamente.

+0

Deve essere qualcosa sulla mia causa, perché ho provato e ancora non funziona. Mi sembra che IE7, IE8, FF e Safari abbiano anche type = "button" come default ... forse lo lascerò non dichiarato – salmane

+0

No, non è assolutamente corretto: tutti i "buoni" browser seguono le specifiche del W3C , che stabilisce che il tipo predefinito è "invia". (Beh, questo è in "modalità standard", se sei in modalità strane, beh (A) non so cosa fanno e (B) uscire dalla modalità quirks.) – Pointy

+0

Inoltre, che funziona sicuramente in IE. Cosa intendi esattamente quando dici "ancora non funziona"? Hai un errore Javascript? – Pointy

1

Hai provato:

var $btn = $("<button>Button Text</button>"); 

Quindi è possibile aggiungere questo in qualsiasi parte il tuo documento In generale, puoi creare praticamente qualsiasi elemento DOM usando una stringa letterale in questo modo.

+0

che funzionerebbe senza dubbio il mio problema è con il "tipo" del pulsante. non appena assegno che IE 7 lo rifiuta – salmane

+0

Si potrebbe certamente fare questo: var $ btn = $ (""); – BradBrening

+0

Ho provato anche quello ma non ha funzionato. un po 'come, non appena ho introdotto l'attributo type IE7 non piace .... potrebbe essere un bug 1.4 jquery? – salmane

-1

penso che si desidera utilizzare questo $ (': submit')

Si trova tutto ciò che funge da pulsante di invio. Vedi: http://api.jquery.com/submit-selector/

+1

Un testo sopra è un comando di creazione del nodo, non un comando di selezione DOM. È possibile aggiungere il nuovo nodo al DOM. – artur02

Problemi correlati