2011-02-18 8 views
9

Estoy tratando de obtener la etiqueta a a continuación para tomar el valor de la selección y pegarlo en la entrada.use JQuery para obtener hermanos

<td class="ms-formbody" style="width:385px"> 
    <input name="ctl00$PlaceHolderMain$dlFields$ctl00$txtSource" type="text" id="ctl00_PlaceHolderMain_dlFields_ctl00_txtSource" class="ms-input" /> 
    <select name="ctl00$PlaceHolderMain$dlFields$ctl00$ddlSourceFields" id="ctl00_PlaceHolderMain_dlFields_ctl00_ddlSourceFields" class="ms-input"> 
     <option value="Some Field Name 1">Some Field Name 1</option> 
     <option value="Some Field Name 2">Some Field Name 2</option> 
     <option value="Some Field Name 3">Some Field Name 3</option> 
     <option value="Some Field Name 4">Some Field Name 4</option> 
    </select> 
    <a href="javascript: appendField();">append</a> 
</td> 

Parece que no sé cómo agarrar a los hermanos. Intenté $(this).siblings("input").val() pero ese error erró el Webpage 'parentNode.firstChild' is null or not an object.

Probado $(this).prev().prev().val() y que vuelve indefinido. ¿Cuál es la mejor manera de agarrar estas cosas?

Gracias, David

Respuesta

13

Tu problema s de su enfoque. Llamar a una función directamente no hará lo que está esperando, que es tener un objeto jquery que represente la etiqueta <a>. En lugar de llamar directamente a una función, puede registrar una función para responder a un evento click en el <a>.

En primer lugar, dar a su enlace de un id:

<a href="#" id="appendSelect">append</a> 

A continuación, utilice Cambie su funcionamiento appendField() con jQuery seleccione que responde a click

$(document).ready(function() { 
    $("#appendSelect").click(function() { 
    var $thatInput = $(this).siblings("input"); 
    var $selectValue = $(this).siblings("select").val(); 
    $thatInput.val($selectValue); 
    }) 
}); 

Con este enfoque $(this) representará a su <un> .

Puede ver a lo que me refiero con mayor profundidad utilizando una consola de depuración de JavaScript (Chrome tiene una por defecto, y puede usar Firebug en Firefox). Pruebe nuevamente su enfoque basado en función original y agregue una declaración console.log($(this));. Debería verlo imprimiendo un objeto DOMWindow. Ahora ponga la misma instrucción de registro en la función click y verá que jQuery le ha dado $ (esto) representando lo que esperaba que fuera.

+0

Gracias por su ayuda, esto fue realmente útil.Siguiendo su ejemplo, envolví mi tabe con un div y luego lo agarré y funcionó maravillosamente $ (document) .ready (function() { $ ("# myList a"). Click (function() { var $ selectValue = $ (this) .siblings ("select"). val(); var $ thatInput = $ (this) .siblings ("input"); $ thatInput.val ($ selectValue); }) }); –

+0

Me alegro de haber ayudado –

0

.children uso() o (.find)

.children sólo busca hijos directos de los padres, encontrar miradas en todos los niveles por debajo de la matriz.

$('.ms-formbody').find('select').val();

0

Esto sólo funcionará para estas identificaciones, pero se puede cambiar fácilmente de ellos:

$('#ctl00_PlaceHolderMain_dlFields_ctl00_txtSource').val($('#ctl00_PlaceHolderMain_dlFields_ctl00_ddlSourceFields').val()); 
0

probar esto ...

$(this).parent().find('input:first').val(selectedOptionValue); 
+0

no funcionó, ver los mensajes anteriores más arriba, creo que es un problema con mi enfoque –

4

intento:

$(this).parent().children("input:first").val(); 
+0

no funcionó, ver los mensajes anteriores más arriba, creo que es un problema con mi enfoque –

1

El método appendfield no tiene acceso a $ (esto).

Aquí está el código de trabajo: http://jsfiddle.net/NBf4d/2/

+0

JSFiddle is AMAZING! Modifiqué el código un poco a más de mi entorno. Olvidé mencionar que es una fila repetitiva, y actualicé usando otras muestras de JQUery. Todavía retocándolo. –

Cuestiones relacionadas