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'))
,然后设置字段的属性。