<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'));
}
});
关于亚光
答案 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>
$('#test').submit(function(e) {
if ( $(this).children('.grab-label').val() == '' ) {
$(this).children('.grab-label').val($(this).closest('label').html());
}
});