在没有事件的情况下使用.jquery .on()

时间:2015-03-25 17:43:22

标签: javascript jquery html

我有输入元素附加到我需要获取其值的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>

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的好方法。它在选择元素时采用了不同的方法,但最终会起作用并导致更干燥的代码。

在这里,我使用每个,来抓取我想要选择的附加元素的每个实例。这将返回所需的值。

$('.reg_field').each( function() {
    group_text[form_count] = $(this).val();
    form_count++;
});

我怀疑问题是我之前的选择器无法使用$(this),这似乎适用于附加元素的更多情况。在评论中提出的另一种可能性是在选择中使用nth-child。我不确定这些问题,并希望得到更好的解释。希望这对面临同样问题的人有所帮助。另外,我很感谢帮助我专注于选择而不是绑定。