如何初始化jquery方法的表单添加?

时间:2015-02-12 01:08:27

标签: javascript jquery forms

我已经找到了一个表格,我试图做一些你经常看到标签的东西:第一个标签有一个文本字段,如果你把东西放进去,一个新的和类似的文本字段似乎接收另一个标记。等等。通过为文本字段设置jQuery .blur()处理程序,我已经掌握了这项工作的基础知识:在输入值并且用户离开字段后,处理程序运行并将新字段插入到表单中。处理程序非常香草,类似于:

$('input.the_field_class').blur(function () { ... });

其中.the_field_class标识收集值的输入字段。

我的问题是,在用户输入第一个值后,新文本字段很乐意添加到表单中,当用户在新添加的字段中输入内容然后离开时,模糊处理程序不会触发。第一个字段继续正常工作,但第二个字段永远不会正常工作。 FWIW,我已经注意并避免了初始字段和添加字段之间的任何ID和名称冲突。我曾经以为jQuery会选择添加的文本字段,它与第一个文本字段具有相同的类标记,并且像原始字体一样处理它,但也许我错了 - 我是否需要戳页面或者某些它的一部分与某种jQuery初始化的东西?谢谢!

1 个答案:

答案 0 :(得分:1)

如果没有在更多上下文中看到您的代码,很难确定,但我最好的猜测是您将处理程序附加到第一个字段,但没有代码可以获取被称为将其附加到新领域。如果是这种情况,您有几个选项,其中两个是:

1)在blur()处理程序中,包含将blur处理程序附加到新创建的字段的代码。

2)使用jQuery的event delegation将处理程序附加到字段容器,并在容器中的任何字段上侦听blur个事件:

<div class="tag-container">
  <input class="the_field_class" /> <!-- initial tag field -->
</div>

<script>
  var $tagContainer = $('.tag-container');
  var createNewField = function() {
    $tagContainer.append($('<input class="the_field_class" />');
  };
  $tagContainer.on('blur', 'input.the_field_class', createNewField());
</script>

哪个更好取决于您的使用案例,但我猜测第二个选项会对您更好,因为您不太可能处理来自容器的大量模糊事件。