el comportamiento de dom jquery no funciona

Tengo la siguiente función que funciona correctamente:

        $(function() {
                var availableTags  = <? echo htmlspecialchars($jsEnc,ENT_NOQUOTES,'utf-8');?>;

                $( "input.tags" ).autocomplete({
                    source: availableTags
                });
        });

Sobre todos los preexistentes:<input class="tags"/> la función hace lo que debería (una lista de autocompletar que es un volcado de base de datos).

Ahora, estas entradas realmente existen en un <table>, con filas que se pueden agregar o quitar sobre la marcha.

Al agregar las celdas a la tabla, hago lo siguiente:

if(i== document.getElementById("soldTo").cellIndex){ element2.setAttribute('class','tags'); }

Lo que básicamente hace que la entrada (element2) sea capaz de ser un objetivo (al menos eso pensé) de la función jquery.

Supongo que la función jquery no es "consciente" de este nuevo elemento y debe reiniciarse de alguna manera para ver los nuevos miembros.

¿Es esto cierto? ¿Esto se hace en el momento de añadir el nuevo elemento? Algún tipo de $(x).add(myBehavior)?

EDITAR

He probado lo siguiente:

$("table.inventoryItems").bind("DOMSubtreeModified", function() {
alert('z');
     $( "input.tags" ).autocomplete({
       source: availableTags
      });
 });

y la alerta tampoco se dispara.

¿Algo parece sospechoso?

¡Gracias

SOLUCIÓN APROPIADA ENLACE EXTERNO

jquery autocompletar en el elemento recuperado con ajax

preguntado el 01 de julio de 12 a las 04:07

¿Está utilizando el mismo ID en varios elementos? -

tables son bestias funky para manipular, especialmente a través de los navegadores. ¿Por qué no estás usando una lista y data- atributos para su conjunto de datos? -

si hay varios input.tags -

Si modifica y el DOM con jquery, no creo que tenga este problema. -

@JaredFarrish, ¿puede proporcionar un enlace a los atributos de datos que está mencionando? Gracias. -

1 Respuestas

tratan DOMSubtreeModified evento:

$("table").bind("DOMSubtreeModified", function() {
     $( "input.tags" ).autocomplete({
        source: availableTags
     });
});

o puedes usar on() método basado en cómo crea un nuevo elemento de entrada:

$("table").on("change", "input.tags", function() {
     $(this).autocomplete({
        source: availableTags
     });
});

Respondido 01 Jul 12, 04:07

Gracias lo probaré hoy! - Jason m

Lo intenté. Vea arriba el código de prueba... demasiado difícil de publicar en un comentario. - Jason m

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.