JQuery以编程方式添加隐藏元素

这真的是我现在得到的。我有一个在页面加载时加载的表单。在我的jquery’ready’函数中,我将隐藏到该表单中,如下所示:

$("").appendTo("#MenuForm") 

当我用firebug检查表单内容时,我可以看到添加了元素。

 ["$(\"#MenuForm\").children()"] is [div, input#thehidden hiddenval] 

到目前为止一切都很好。当我提交这个表格并尝试再次读取elemet时,我无法获得我添加的新隐藏值的值。

 alert($('#thehidden').val()) 

未定义

任何帮助,将不胜感激

你什么时候试图从#thehidden div读取值? 当按下提交按钮或提交后页面重新加载? 如果您不是每次在页面加载时都创建输入,那么下一页加载就不会出现。

我只是通过创建输入并在警报中读取值来测试您的代码,它对我来说很好。 亲自检查一下。

尝试

 $('#someid').append($('').attr('id','hidden1').attr('type','hidden').attr('value','some val')); 

您可以创建一个jQuery函数来完成大部分工作。 我使用此函数以编程方式添加隐藏的输入:

jQuery函数:

 // This must be applied to a form (or an object inside a form). jQuery.fn.addHidden = function (name, value) { return this.each(function () { var input = {}; if (Object.prototype.toString.call(value) === '[object Array]') { var r = /\[\]/; // Pass an array as a series of separate hidden fields. for (var i = 0; i < value.length; i++) { input = $("").attr("type", "hidden") .attr("name", name.replace(r, '[' + i + ']')) .val(value[i]); $(this).append($(input)); } } else { input = $("").attr("type", "hidden") .attr("name", name) .val(value); $(this).append($(input)); } }); }; 

用法:

对于标准表单项或MVC中的简单参数, theHidden as String

 $('#myform').addHidden('theHidden', 'jam'); =>  

对于MVC ID As List(Of Integer)列表参数:

 $('#myform').addHidden('ID', [1,2,5]); =>    

对于MVC中具有List属性model As ComplexType复杂类型:

 $('#myform').addHidden('Customer[].CustomerID', [1,2,5]); =>    
 Class ComplexType Property Customer As List(Of CustomerDetail) End Class Class CustomerDetail Property CustomerID As Integer End Class 

您需要将输入ELEMENT插入DOM,而不仅仅是将HTML注入页面。 对于表单字段,存在差异。

使用var field = $(document.createElement('input')) ,然后设置字段的属性。