2010-05-09 12 views
5

Estoy tratando de crear un botón usando jquery. utilizo el siguiente códigoIE 7 no le gusta jquery ('<button/>') .attr ('tipo', 'botón')

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

Sin embargo esto funciona en Safari, FF IE8 pero no IE7

i intentado utilizar la función attr:

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

esto no funciona bien.

¿Alguna idea de qué iba a funcionar? Supongo que si no se asigna un tipo que sería por defecto en el botón pero yo prefiero hacer que

gracias por su ayuda

+0

Hace un '

+4

En realidad [botón] (http://www.w3.org/TR/html401/interact/forms.html#h-17.5) se predetermina a type = submit. El botón – Tgr

+2

tiene un atributo de tipo, tipo = botón, tipo = enviar y escribe = restablecer – salmane

Respuesta

5

Prueba esto:

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

Ahora, como es el caso, el tipo predeterminado para los botones es "botón" de todos modos en el IE (7, al menos, no está seguro acerca de las normas 8-mode). Sin embargo, lo anterior debería funcionar. Me encontré con esto el otro día. IE le permite proporcionar el tipo de letra en la sintaxis del elemento al crear elementos, y parece que jQuery está pasando su argumento directamente a la API DOM de bajo nivel aquí.

Ah, y funciona bien en FF y Chrome también.


edición — bien qué diferencia hace un año, ¿eh? No puedo conseguir que ese mecanismo funcione para mí ahora con jQuery 1.4.4 o jQuery 1.5.x. La buena noticia es que jQuery 1.6 parece funcionar de la manera que el OP quería: mediante la configuración de "tipo" de una manera más normal como jQuery.

Lo que hace parece que funciona, sin embargo, es para llamar directamente ".setAttribute()" en el elemento. Por lo tanto:

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

hace no lanzar una excepción, y lo hace establecer el atributo "type" correctamente. (Eso es un poco extraño, ya que Microsoft claramente documenta "tipo" como de solo lectura.) El cambio en 1.6 parece estar en la misma línea. Anteriormente, la biblioteca verificaba "tipo" y explícitamente no permitía que se estableciera en elementos que ya estaban en el DOM, pero procedía a intentar establecerlo como un atributo simple para un elemento que no estaba en el DOM. Ahora, el código 1.6 llama a ".setAttribute()" para establecer "type", que (por razones desconocidas para mí) funciona bien.

+0

Debe ser algo de mi parte porque lo intenté y todavía no funciona. Me parece que IE7, IE8, FF y Safari también tienen type = "button" como predeterminado ... quizás lo dejo sin declarar – salmane

+0

No, eso definitivamente no es correcto: todos los "buenos" navegadores siguen las especificaciones W3C , que estipula que el tipo predeterminado es "enviar". (Bueno, eso está en "modo estándar"; si estás en el modo peculiar, bueno (A) no sé lo que hacen y (B) sales del modo peculiar.) – Pointy

+0

Además, eso definitivamente funciona en IE. ¿A qué te refieres, exactamente, cuando dices "todavía no funciona"? ¿Recibes un error de Javascript? – Pointy

1

¿Usted ha intentado:

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

A continuación, puede adjuntar la presente en cualquier parte su documento. En general, puede crear casi cualquier elemento DOM usando un literal de cadena de esta manera.

+0

que funcionaría sin duda mi problema es con el "tipo" del botón. tan pronto como asigno que IE 7 lo rechaza – salmane

+0

Sin duda podría hacer esto: var $ btn = $ (""); – BradBrening

+0

Lo intenté también, pero no funcionó. de alguna manera, tan pronto como presento el atributo tipo IE7 no me gusta ... ¿podría ser un error de jquery 1.4? – salmane

-1

Creo que desee utilizar esta $ (': submit')

Se encuentra algo que actúa como un botón de envío. Ver: http://api.jquery.com/submit-selector/

+1

Un texto de arriba es un comando de creación de nodo, no un comando selector de DOM. Puede agregar el nuevo nodo al DOM. – artur02

Cuestiones relacionadas