jquery: получить значение метки при отправке - PullRequest
0 голосов
/ 18 марта 2011
<form id="test" onsubmit="return checkParams();" method="post" action="">
    <div class="input-inside-label">
        <label for="loc">12345</label>
        <input class="grab-label" value="" type="text" name="loc" id="loc">
    </div>
</form>

мое входное значение пусто. Однако я не хочу, чтобы он был представлен пустым. Когда форма отправлена, я хочу, чтобы она взяла значение метки и затем отправила ее.

Однако у меня немало проблем с этим. Есть идеи, что я тут не так делаю?

$('#test').submit(function(e) {
    if ( $(this).children('.grab-label').val() == '' ) {
        $(this).children('.grab-label').val($(this).closest('label'));
    }
});

С уважением, Мэтт

Ответы [ 3 ]

4 голосов
/ 18 марта 2011

Во-первых, вызывая .children() help , вы будете запрашивать только прямых потомков от корневого узла. В этом случае он не может найти .grab-label, поскольку он не является прямым потомком.

Используйте .find() help там. Кроме того, .closest() ищет только родительские узлы. В вашем контексте он не может найти нужный узел по этой причине. Вы можете использовать .prev() help , начиная с узла input.

$('#test').submit(function(e) {
    var $input = $(this).find('.grab-label');

    if ( !$input.val().length ) {
        $input.val($input.prev().text());
    }
});
3 голосов
/ 18 марта 2011

closest дает вам предка .Но label является родным поля ввода.Используйте .prev().children будет искать только на следующем уровне DOM, а не всех потомках.Используйте .find() вместо:

$(this).find('.grab-label').val($(this).prev('label').text());

(вам также необходимо .text())

или измените свой HTML-код на:

<div class="input-inside-label">
    <label for="loc">12345
        <input class="grab-label" value="" type="text" name="loc" id="loc">
    </label>
</div>

Но тогда было бы проще использовать .parent():

$(this).find('.grab-label').val($(this).parent().text());
1 голос
/ 18 марта 2011

вы должны получить .html () из этого <label>

$('#test').submit(function(e) {
    if ( $(this).children('.grab-label').val() == '' ) {
        $(this).children('.grab-label').val($(this).closest('label').html());
    }
});
...