jQuery   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了form-submit – 如何使用jQuery动态添加输入序列化表单?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经阅读了很多解决类似问题的问题,但我还是无法控制它.

我有一个简单的HTML表单就像

<form id="edit-items" name="edit-items" onsubmit="saveItems();">
  <input type="submit" value="Save">
  <input class="item" id="ei81" type="hidden" name="I[81]" value="1">
  <input class="item" id="ei124" type="hidden" name="I[124]" value="1">
</form>

由于先前的保存,可以在文档加载时设置两个现有的隐藏输入.
现在我有图像(菜单类型).如果单击它们,则相应的隐藏输入将附加到表单:

<img id="i37" class="clickable-item" src="items/i37.gif" title="item name" onclick="addItem(37,1)" />

addItem函数

function addItem(id,n) {
  var zitem = $("#e"+id);
  if ( 0 in zitem ) {
    if ( zitem.val() > 0 ) {
      var newcnt = parseInt(zitem.val()) + n;
      if ( newcnt <= 0 ) {
        zitem.remove();
      }
      else {
        zitem.val(newcnt);
      }
    }
  }
  else if(n == 1) {
    var iform = $("#edit-items");
    iform.append("<input class=\"item\" id=\"e"+id+"\" type=\"hidden\" name=\"I["+id+"]\" value=\"1\">");
  }
}

这部分一切正常,点击图片后,我的表格看起来像

<form id="edit-items" name="edit-items" onsubmit="saveItems();">
  <input type="submit" value="Save">
  <input class="item" id="ei81" type="hidden" name="I[81]" value="1">
  <input class="item" id="ei124" type="hidden" name="I[124]" value="1">
  <input class="item" id="ei37" type="hidden" name="I[37]" value="1">
</form>

这正是我想要的.但是当点击提交按钮时,只提交前两个元素(未动态添加的元素).

现在,我阅读了很多关于.bind和.live处理程序的内容,但我显然忽略了一些观点.我试删除图像上的onclick属性并将.live绑定到它们,因为它们导致了新的输入:

$(".clickable-item").live("click",function() {
  addItem($(this).attr("id"),1);
});

但是,不会传输所需的ID(因此不会添加正确的输入).我了解到.live不会将处理程序绑定到任何元素,而是绑定到事件.

甚至可以将已单击的元素传递给实时处理程序?
图像是否应该被.live观看,还是应该被其他东西绑定?

在这里学到的另一个问题是,输入应该由.live监视,因为它们是动态添加的.但是我会附上什么样的事件呢?未单击输入本身.

我真的很感激任何帮助,因为我正在开始迷失方向并开始迷失在那一方面.

提前致谢,
保罗

解决方法

关于 live() [docs]:这是指被点击的元素,因此您可以使用addItem(this,1)将其传递给addItem.这部分代码应该可行.

如果您不动态添加删除图像,则没有理由使用实时.你可以使用click() [docs](是的,不要在HTML中使用onclick).

但我看到另一个问题:

图像ID是i37. $(this).attr(“id”)将返回此值.

在addItem函数中,然后获取此值并执行字符串连接.结果将是$(“#ii37”)(注意两个是).

您创建的输入元素将具有id ii37而不是i37.

如果你更正这个以匹配你的例子中的其他元素(即i37),你会遇到问题,因为你有几个具有相同id的元素(输入元素和图像).如果图像位于层次结构中的输入字段之前,则$(“#i37”)将始终选择图像,并且您无法在图像上调用.val().

由于我不知道代码的总体目的是什么以及您想要做什么,我不能给出任何建议如何改进.也许仅仅改变图像的前缀和输入字段id就足够了.

这是不正确的. .live()将事件处理程序绑定到文档根目录.事件,如果没有取消,冒泡DOM树,所以他们最终到达根.在那里,检查event.target [docs]属性以确定被单击的元素.

大佬总结

以上是大佬教程为你收集整理的form-submit – 如何使用jQuery动态添加输入序列化表单?全部内容,希望文章能够帮你解决form-submit – 如何使用jQuery动态添加输入序列化表单?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。