2011-10-03 13 views
5

Lo que intento hacer es rellenar datos en un elemento seleccionado. Estoy usando el siguiente código, donde un usuario selecciona una categoría de asunto de un menú desplegable, que luego debe llenar el siguiente html del elemento de selección. El manejador funciona bien, devuelve el html correcto que necesito colocar dentro del elemento seleccionado.jQuery - Buscar el siguiente elemento de selección

Además, tenga en cuenta que eventualmente clono estos dos elementos seleccionados y será necesario completarlos en consecuencia.

El problema es que $elem siempre devuelve nulo.

supongo que se trata de un problema con esta línea de código, sin embargo no está muy seguro (teniendo en cuenta que también estoy clonación de estos dos elementos selectos):

var $elem = $this.closest('div').prev().find('select');

$(".SubjectCategory").live("click", function() { 
    var $this = $(this); 
    var $elem = $this.closest('div').next().find('select'); 
    var a = $this.val(); 

    $.get("/userControls/BookSubjectHandler.ashx?category=" + a, {}, function (data) { 
     $elem.html(data); 
    }); 
}); 

<div class="singleField subjectField"> 
    <label id="Category" class="fieldSml">Subject Matter</label> 
    <div class="bookDetails ddl"><select id="ddlSubjectMatter" class="fieldSml SubjectCategory"></select></div> 

    <label id="Subjects" class="fieldSml">Category</label> 
    <div class="bookDetails ddl" id="subjectMatter"><select id="ddlSubjects" class="fieldSml Subjects"></select></div> 
</div> 
+0

¡Enhorabuena! Eso definitivamente es un código, ¿cuál es la pregunta real? –

+0

@AlastairPitts: Uh, '$ elem' siempre devuelve nulo? – fuzz

+0

excelente edición. Solo recuerda, es muy difícil responder una pregunta si nunca se te pregunta. –

Respuesta

12

Está buscando dentro del <label>, no el próximo <div> como desee. next solo obtiene un elemento después del actual.

Pruebe esto: Busca el primer div junto a su elemento principal.

var $elem = $this.closest('div').nextAll('div').first().find('select'); 
1

¿Por qué está creando una variable extraña $this? A menos que haya omitido el código que lo requiere para un ámbito diferente, simplemente llame a $ (esto). Eso podría estar causando el problema, también.

+1

Nah, $ esto está almacenando en caché $ (esto), lo cual está bien ya que lo está usando dos veces. –

+0

Ah, entonces. A partir de una búsqueda rápida, parece que está bien. ¡Tu aprendes algo nuevo cada dia! –

+0

No es '$ this' lo que está causando el problema, desafortunadamente. – fuzz

2

Dado que el elemento de origen tiene un id de ddlSubjectMatter y el selectivo elemento de destino tiene un id de subjectmatter, puede ser mucho más simple para capitalizar la primera letra del segundo id (es decir, hacer subjectmatter), entonces se obtiene el segundo elemento por:

var elem = document.getElementById(this.id.replace(/^ddl/,'')); 

que hace que la relación elemento independiente de la presentación del documento.

Dicho sea de paso, HTML no es válido para tener elementos seleccionados sin opciones, aunque no es un gran problema.

Cuestiones relacionadas