jquery ajax checkbox append uniform

jQuery Uniform Checkbox no(un) chequea



ajax append (8)

Estoy usando jQuery Uniform para introducir / seleccionar estilos, etc. Sin embargo, la casilla de verificación ha dejado de funcionar. Estoy appending datos enviados desde una llamada ajax. Una vez que está cargado, uso $.uniform.update("input:checkbox") para actualizar el nuevo html. Al intentar (des) verificar la entrada, solo funciona una vez. Si quiero (des) verificarlo nuevamente, no cambia en absoluto.

Intenté cambiar el Javascript uniforme para que todas las acciones (es decir, click , focus , blur , etc.) estén bajo la función .live . (es decir, .live("click", ). Esto simplemente impide que todo funcione.

Actualizar:

He leído por completo Uniform JS y descubrí un problema:

if(!$(elem).attr("checked")){ //box was just unchecked, uncheck span spanTag.removeClass(options.checkedClass); }else{ //box was just checked, check span. spanTag.addClass(options.checkedClass); }

La .attr("checked") falla. Siempre devolverá falso. ¿Por qué? No lo sé. Además de esto, no actualiza la input original para eliminar el atributo checked o para establecer el atributo checked .

He revisado el sitio web oficial y encontré que no actualiza la entrada de la casilla de verificación. Entonces no soy solo yo xP

Busqué en Google un poco y encontré varios métodos para verificar si una casilla de verificación está marcada; sin embargo, fallan los siguientes métodos:

if ($(elem).attr("checked")) // The original. if ($(elem).attr("checked") == true) if ($(elem).is(":checked")) if ($(elem).checked) // and: var check = $(elem).match(/checked=/); if (check == null)

Las palabras de orientación son muy apreciadas ~: 3


SOLUCIÓN SIMPLE

Esto se debe a UniformJs requiere que actualice su modificación en elementos uniformes si necesita cambiar los valores en el formulario de forma dinámica:

$(''#checkbox'').prop(''checked'',true); $.uniform.update();

Editar

Si desea actualizar el #checkbox solamente:

$(''#checkbox'').prop(''checked'',true); $.uniform.update(''#checkbox'');


¿No podrías usar algo como

$("#checkbox").attr("checked", "true");

para marcar la casilla de verificación, y

$("#checkbox").removeAttr("checked");

para desmarcarlo?


Creo que la última versión de Jquery usa un método diferente para evaluar un valor verificado. Usar una versión un poco más antigua (aunque no ideal) me solucionó este problema. Eso fue hace un tiempo, y PixelMatrix todavía no parece haber actualizado Uniform.


Ha pasado un tiempo pero tuve el mismo problema, pero lo resolví con una solución simple.

Uniform agrega un span sobre la casilla de verificación y le da la clase checked si está marcada o no, pero solo en la carga de la página. Si marca o desmarca la casilla de verificación mientras la página ya está cargada, desmarcará (o marcará), pero como el span está sobre ella, verá que no está actualizada, tiene que hacerlo manualmente.

$(''#myDiv input[type=checkbox]'').attr(''checked'',true); $(''#myDiv input[type=checkbox]'').parent().addClass(''checked'');

o

$(''#myDiv input[type=checkbox]'').attr(''checked'',false); $(''#myDiv input[type=checkbox]'').parent().removeClass(''checked'');

Puede que no sea la solución más limpia, pero funciona bien en todos los navegadores.


No necesita cambiar .attr() a .prop() :

"click.uniform touchend.uniform": function(){ if(!$(elem).attr(''checked'')){ //box was just unchecked, uncheck span spanTag.removeClass(options.checkedClass); //Added by PingOn $(elem).removeAttr(''checked''); //end addition by PingOn // Added by John }else if(!$(elem).is('':checked'')){ spanTag.removeClass(options.checkedClass); // end addition by john //Added by PingOn $(elem).removeAttr(''checked''); //end addition by PingOn }else{ //box was just checked, check span. spanTag.addClass(options.checkedClass); //Added by PingOn $(elem).attr(''checked'',''true''); //end addition by PingOn }


Sé que esto puede ser un poco tarde, pero espero que ayude a alguien. Tuve que agregar un par de líneas al código de uniforme para que buscara casillas de verificación previamente marcadas. Este código comienza en la línea 262 para mí. Estoy usando Uniform versión 1.7.5. Las líneas entre las notas "agregadas por Juan" son las que agregué.

"click.uniform touchend.uniform": function(){ if(!$(elem).attr("checked")){ //box was just unchecked, uncheck span spanTag.removeClass(options.checkedClass); // Added by John to look for checkboxes with the attr "checked" that have been click to uncheck }else if(!$(elem).is('':checked'')){ spanTag.removeClass(options.checkedClass); // end addition by john }else{ //box was just checked, check span. spanTag.addClass(options.checkedClass); } },


Solo haz esto:

$(''#checkbox'').prop(''checked'',true).uniform(''refresh'');


jQuery 1.6.4 cambió el significado de la función attr() , que es utilizada por jquery.uniform.js. attr() ahora devuelve el estado en el que estaba el atributo WAS cuando se cargó la página, y no el estado del atributo AHORA. Hay una función de reemplazo llamada prop() , que hace el trabajo que solía hacer attr() .

Para arreglar el complemento, reemplace cada aparición de attr("checked") con prop("checked") . Además, cambie attr("disabled") to prop("disabled") .

Eso debería arreglar tu proyecto. Funcionó para mí ;-)

Ver también: https://github.com/pixelmatrix/uniform/pull/167 , que intenta abordar el problema con una mejor compatibilidad con versiones anteriores.