Как получить значение текстового поля внутри элемента span - PullRequest
1 голос
/ 09 июля 2011

Я хочу получить значение текстового поля (только одно) внутри элемента span, используя jquery, но не смог.

<span>simple span text
<a class="remove" href="javascript:" title="Remove">x</a>
<input type="hidden" name="word[ids][]" value="this is text">
</span>

Код Jquery, связанный с удалить класс тега привязки

$(".remove").live("click", function(){

alert ($(this).parent().('input:text').val()); // return undefined

//i just coded below to check whether span itself is getting or not
alert ($(this).parent().attr('tag')); // this also return undefined 

if ($(this).parent().is('span'));
alert("parent is span"); // only this works 

}); 

Ответы [ 6 ]

3 голосов
/ 09 июля 2011

Если input всегда является следующим братом элемента remove, то это будет работать:

$(".remove").live("click", function(){
    var value = $(this).next().val();
}); 

Объяснение того, почему ваш код не работает:

Эта строка $(this).parent().('input:text').val() синтаксически и логически неверна.

Если вы хотите найти элемент внутри другого, вы должны использовать find [документы] :

$(this).parent().find('input:text').val()

Это все равно не даст вам значения, поскольку у вас есть скрытый input элемент.Если вы посмотрите :text [документы] документацию , вы увидите, что этот селектор, таким образом, не выбирает их.Так что или просто используйте 'input' или используйте :hidden [документы] : 'input:hidden'.

.attr('tag') просто неработать, потому что элемент HTML не имеет атрибута tag .Вы можете получить имя тега из элемента DOM, используя свойство nodeName:

$(this).parent()[0].nodeName
2 голосов
/ 09 июля 2011

сделать так:

 $(".remove").live("click", function() {
    //alert($(this).parent().attr('tagName')); //return the tagName
    alert($(this).parent().find('input').val()); //this works
});

Проверьте это здесь http://jsfiddle.net/zhiyelee/29bgX/

0 голосов
/ 09 июля 2011
$('.remove').live('click',
function() {
    console.log($(this).next('input:hidden').val());
});
0 голосов
/ 09 июля 2011

При этом:

$(".remove").live("click", function() {
    alert ($(this).closest("span").find("input[type='hidden']").val());
});

Это найдет внутри ближайшего span предшественника, поэтому будет более гибким для изменений кода HTML.

Надеюсь, это поможетПриветствия

0 голосов
/ 09 июля 2011

Это не будет работать:

$(this).parent().('input:text').val()

Вместо этого вам необходимо использовать функцию find. Другая проблема заключается в том, что вы ищете текстовый ввод, но ваш ввод имеет тип hidden:

$(this).parent().find('input:hidden').val()

В отдельной заметке ваш окончательный alert всегда будет предупрежден, независимо от того, является ли родитель span или нет, потому что в конце вашего оператора if стоит точка с запятой.

0 голосов
/ 09 июля 2011

Попробуйте это:

$(".remove").live("click", function() {
    alert ($(this).parent().find("input").val());
});
...