2012-06-14 14 views
8

Mi problema es muy simplejQuery removeAttr ('tipo') no funciona

$('#button').removeAttr('type'); 

desencadena un error en Firebug

type property can't be changed 

tengo 2 preguntas:

  • Cómo para evitar esto?
  • ¿Hay una referencia con una lista de propiedades que no se pueden cambiar?

Gracias

EDITAR

Lo que quiero hacer es:

Prevenir el botón de enviar el formulario.

Nota: mi botón está incluido como una plantilla html, no se puede acceder al código del formulario desde mi cuenta.
Algo así como:

include 'form.php'; 
include 'buttons.php'; 

donde tengo control sólo en buttons.php

+2

tiene la respuesta 'type property no se puede cambiar' – mgraph

+0

media respuesta, todavía la lista :) – skafandri

+0

Como no puede cambiar el tipo de un elemento, tendrá que reemplazarlo con un nuevo elemento. –

Respuesta

17

No se puede cambiar una input 's type en IE (< 9?) Después de que se ha insertado en el DOM. jQuery provoca un error en todos los navegadores debido a esto.

De fuente:

set: function(elem, value) { 
      // We can't allow the type property to be changed (since it causes problems in IE) 
      if (rtype.test(elem.nodeName) && elem.parentNode) { 
       jQuery.error("type property can't be changed"); 

No hay otros casos que sé sobre (o jQuery conoce) y la forma de evitar esto depende mucho de lo que está tratando de hacer en el primer lugar . Considere crear un nuevo elemento con diferentes tipos y usarlo, por ejemplo.

Editar: Para evitar que el botón de enviar un formulario, puede utilizar:

$("#button").click(function(e){ 
    e.preventDefault(); 
}); 

O (crédito Tim abajo):

$("#button").prop("disabled", true); 

Para prevenir la forma de ser presentado a través cualquier medio, puede usar:

$("#form").submit(function(e){ 
    e.preventDefault(); 
}); 
+3

Configurar el botón para desactivarlo parecería ser una mejor opción. Es más simple y proporciona retroalimentación al usuario. '$ (" # button ") [0] .disabled = true;' –

+0

@TimDown de hecho y hace que el botón no esté disponible mediante pestañas, etc. :) gracias por la idea – Esailija

+0

No se puede deshabilitar el botón, porque se enlazará otra función a él – skafandri

6

se puede reemplazar:

$('#button').replaceWith('<input type="text" value="text"/>'); 

o utilizar event.preventDefault()

+0

Una sugerencia - y una buena alternativa a un simple cambio de' type' - y (aunque esto puede o no puede ser un beneficio) - esto también eliminar cualquier otras personas que manipulan los botones. –

1

Dado que lo que desea es desactivar el botón de envío:

Si está utilizando jQuery < 1.6 hacer esto:

$("#button").attr("disabled", 'disabled'); 

Si está utilizando jQuery 1.6 +:

$("#button").prop("disabled", true); 

Ver esta pregunta: ¿por qué .prop() vs .attr() para las referencias.