我有输入元素附加到我需要获取其值的HTML文档。我知道.on()应该用于获取附加元素,但.on()期望一个事件激活它,我不需要一个事件。
以下是代码。 #save_design位于页面的不同部分。 #fields_cnt是保存所有附加表单的父级。 .reg_field是我试图获得价值的元素。第一个子作品是因为在加载文档时存在该表单,或者换言之,不附加该表单。其他子节点都返回未定义的值,或者根据输入类型和我应用的逻辑返回false。这使我相信应该使用.on()或接近它的东西。
为了澄清,我试图在点击#save_design时获取附加输入的值。
$('#save_design').click( function() {
group_text[form_count] = $('#fields_cnt .field_group:nth-child(' + child + ') .reg_field').val();
我已尝试将原始点击事件替换为原样。它没有奏效。
$('body').on('click', '#save_design', function(){
我尝试使用没有事件或事件对象的.on()。它也没有用。
$('body').on('', '', function(){
group_text[form_count] = $('#fields_cnt .field_group:nth-child(' + child + ') .reg_field').val();
});
我找到了一个应该有效的插件。
JQuery selecting dynamically generated html without adding event (with live)
这并不理想,因为正如github自述文件所述,它正在被重写。此外,SO答案现在已经3年了,所以它可能不再是正确的答案。
https://github.com/brandonaaron/livequery
我想找到更直接的解决方案。有没有办法在jQuery中本地执行此操作?有没有一种方法可以在没有事件的情况下使用.on(),如果有,那么适当的语法是什么?
更新: 澄清:按下添加字段按钮后会附加输入字段。它们的值在追加后会发生变化。每次更改时,我都不希望重新记录输入的值。
UPDATE 以下是HTML结构,可以更好地了解我如何定义孩子。
<div id="fields_cnt">
<div id="field_group_1" class="field_group form-group">
<input placeholder="Field" class="reg_field form-control" />
</div>
<!-- This is appended by jQuery. There may be multiple of these -->
<div id="field_group_2" class="field_group form-group">
<input placeholder="Field" class="reg_field form-control" />
</div>
</div>
答案 0 :(得分:0)
我找到了解决问题的好方法。它在选择元素时采用了不同的方法,但最终会起作用并导致更干燥的代码。
在这里,我使用每个,来抓取我想要选择的附加元素的每个实例。这将返回所需的值。
$('.reg_field').each( function() {
group_text[form_count] = $(this).val();
form_count++;
});
我怀疑问题是我之前的选择器无法使用$(this),这似乎适用于附加元素的更多情况。在评论中提出的另一种可能性是在选择中使用nth-child。我不确定这些问题,并希望得到更好的解释。希望这对面临同样问题的人有所帮助。另外,我很感谢帮助我专注于选择而不是绑定。