【问题标题】:jQuery .val() not working on hidden fields added with .html()jQuery .val() 不适用于使用 .html() 添加的隐藏字段
【发布时间】:2015-11-26 18:24:45
【问题描述】:

我有一个加载文档主要部分的 html 表单,后加载 ajax 请求并获取一个 xml 文件,该文件被解析以创建可以更新/提交的“子”表单。这是“预加载”的形式

<html>
   <head>
    <script src="jquery.js">
    <script src="jquery.forms.js">
    <script>
      $(document).ready(function () {
      //Script to execute when form is loaded       
      loadOrder(unid);
      });
    </script>
   </head>
   <body>
     <form id="mainform" name="main" method="post" action="whatever">
       <input type="hidden" id="unid" name="unid" value="123" />        
     </form>
     <div id="orderForms">    
     </div>
   </body>
</html>

这是加载后的表单:

<html>...
    <div id="orderForms"> 
       <form id="order_1" name="order" method="post" action="whatever">
         <input type="hidden" id="pid_1" name="pid" value="123" />
         <input type="hidden" id="unid_1" name="unid" value="456" />
       </form>
       <form id="order_2" name="order" method="post" action="whatever">
         <input type="hidden" id="pid_2" name="pid" value="123" />
         <input type="hidden" id="unid_2" name="unid" value="789" />
       </form>
   </div>
  </body>
</html>

JS代码:

function loadOrders(unid){
   var rUrl = "url";
   $.ajax({type: "GET", url: rUrl, async: true, cache: false, dataType: "xml", success: postLoadOrders}) ;
}

function postLoadOrders(xml){
   nxtOrder = 1;
   var html="";
   $('order',xml).each(function() {
  //  parses the xml and generates the html to be inserted into the <div>
   });  
   $("#orderForms").html(html);
}

这一切正常,主窗体加载,&lt;div&gt; 中的“隐藏”窗体被写入。当我在主窗体上放置一个按钮时,就会出现问题......

function submitOrder(){
   $("#pid_1").val('555');
   $("#order_1").formSerialize();
   $("#order_1").ajaxSubmit();
}

如果我在 .val('555') 之前提醒($("#pid_1").val()) 它会显示原始值,当我在之后提醒时,它会显示新值,但是它会提交原始值,如果我在 firebug 中打开 html,则该值不会显示为更改。

如果我在主表单中放置一个隐藏字段,当文档加载并更改其值时,该隐藏字段不仅会发布新值,而且在检查源时也会显示为已更改。

有什么想法吗?

【问题讨论】:

  • 格式化你的代码,这很难读。并且只包括相关部分。
  • 您的dataType: xml" 应该是dataType: "xml"
  • dataType 上缺少的 ":"xml" 是错误的复制/粘贴。

标签: javascript jquery html


【解决方案1】:
$('order',xml).each(function() {
}); 

这不是 JQuery 中的对象

您可以编辑:

$('[name=order]',xml).each(function() {
});

【讨论】:

  • 实际上'order'是返回的xml文档中的一个元素,即:123456123678
  • @Jeremy 您可以在使用前通过 console.log(xml) 进行检查
  • 那段代码确实有效。解析xml生成的html存在问题。我可以使用 $("#pid_1").val() 更改和检索值,但是提交时它不是更改的值,而是发布的原始值。
  • @Jeremy ,使用 $("#pid_1").attr("value", new_value);设置新值
  • 我也试过了,结果一样。代码看到该值已更改,但未反映在源代码或帖子中。开始怀疑这是否是 jQuery 问题。
猜你喜欢
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 2012-12-21
  • 2021-03-11
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多