jquery:获取标签值onsubmit

时间:2011-03-18 18:25:11

标签: jquery input user-input

<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 个答案:

答案 0 :(得分:4)

首先,通过调用.children()help,您只需从根节点查询直接子项。在这种情况下,它找不到.grab-label,因为它不是直接的孩子。

在那里使用.find()help。此外,.closest()仅查找父节点。在您的上下文中,由于该原因,它无法找到所需的节点。您可以从input节点开始使用.prev()help

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

    if ( !$input.val().length ) {
        $input.val($input.prev().text());
    }
});

答案 1 :(得分:3)

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());

答案 2 :(得分:1)

您必须从<label>

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