0

我想知道是否有更好的方法从输入中获取数据然后发布它们。我在这里有这段代码可以正常工作,但我只想知道是否有更好的方法可以用它来简化它。

$('#Subscription').submit(function(e){
    var url = $(this).attr('action'),
        1 = $('input[name=1]').val(),
        2 = $('input[name=2]').val(),
        3 = $('input[name=3]').val(),
        4 = $('input[name=4]').val(),
        5 = $('input[name=5]').val(),
        6 = $('input[name=6]').val(),

    $.post(url, { 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6 }, function (data) {
        // Do something after post
    });

    e.preventDefault();
});
4

2 回答 2

2

试试这个http://api.jquery.com/serialize/

例子:

$('#Subscription').submit(function(e){
    var url = $(this).attr('action'),
    var formData= $(this).serialize();

    $.post(url, data:formData, function (data) {
        // Do something after post
    });

    e.preventDefault();
});
于 2012-09-25T18:56:52.983 回答
0

如果您的输入元素不在表单内,也请尝试以下代码。

<div id="form_clone">
    <input name="name" />
    <input name="id" />
    <input name="contact_details" />
    <input name="info" />
</div>

序列化”函数只允许获取表单内的输入字段,但如果您想获取此元素内的输入元素的值,请使用:

(function($) {

    $.fn.serializeAnything = function() {

        var toReturn    = [];
        var els         = $(this).find(':input').get();

        $.each(els, function() {
            if (this.name && !this.disabled && (this.checked || /select|textarea/i.test(this.nodeName) || /text|hidden|password/i.test(this.type))) {
                var val = $(this).val();
                toReturn.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( val ) );
            }
        });

        return toReturn.join("&").replace(/%20/g, "+");

    }

})(jQuery);

用法:

$('#form_clone').serializeAnything()
于 2012-09-25T19:16:37.283 回答