jQuery - thêm các tham số bổ sung khi gửi (KHÔNG ajax)


206

Sử dụng 'submit' của jQuery - có cách nào để truyền các tham số bổ sung cho biểu mẫu không? Tôi KHÔNG tìm cách làm điều này với Ajax - đây là cách gửi biểu mẫu điển hình, bình thường.

$('#submit').click(function () {
    $('#event').submit(function () {
        data: { 
        form['attendees'] = $('#attendance').sortable('toArray').toString();
    });
});

Bạn đang sử dụng công nghệ phía máy chủ nào?
Enrique

Xem câu trả lời của tôi [tại đây] [1], nối vào biểu mẫu nối tiếp trước khi gửi. [1]: stackoverflow.com/questions/17809056/ Kẻ
Jeff Lowery

Câu trả lời:


371

Điều này đã làm điều đó cho tôi:

var input = $("<input>")
               .attr("type", "hidden")
               .attr("name", "mydata").val("bla");
$('#form1').append(input);

được dựa trên câu trả lời của Daff, nhưng đã thêm thuộc tính NAME để cho phép nó hiển thị trong bộ sưu tập biểu mẫu và thay đổi VALUE thành VAL Cũng kiểm tra ID của FORM (form1 trong trường hợp của tôi)

đã sử dụng con bọ lửa Firefox để kiểm tra xem phần tử đã được chèn chưa.

Các phần tử ẩn được đăng trở lại trong bộ sưu tập biểu mẫu, chỉ các trường chỉ đọc bị loại bỏ.

Michel


46
Làm thế nào để tôi hát "bạn là ánh mặt trời của tôi" trong nhị phân? Cảm ơn bạn rất nhiều. Điều này giải quyết rất nhiều điều.
Ciel

38
Bạn có thể cải thiện một chút khả năng đọc: var input = $ ("<input>", {type: "hidden", name: "mydata", value: "bla"}); $ ('# form1'). chắp thêm ($ (đầu vào));
Konstantine Kalbazov

2
$ ("<input>"). attr ("type", "hidden"). attr ("name", "mydata"). val ("bla"). appendTo ('# form1'); là một cách khác
kiev

6
Tôi thích một kết hợp gồm: $ ("<input>", {type: "hidden", name: "mydata", value: "bla"}). AppendTo ("# form1");
gabeio

Không có giới hạn về kích thước dữ liệu? Tôi đã gửi một số đối tượng lớn bằng cách sử dụng JSON.opesify (obj) và phương thức này và nó dường như bị cắt ngắn.
omikron

26

Trong trường hợp của bạn, chỉ cần thêm một trường ẩn khác vào biểu mẫu của bạn một cách linh hoạt.

var input = $("<input>").attr("type", "hidden").val("Bla");
$('#form').append($(input));

Dữ liệu tôi cần gửi không có khả năng về hình thức. Nó phải được chụp và xử lý ở phía máy chủ.
Ciel

Bạn có ý nghĩa gì bởi "không có khả năng"?
Vincent Ramdhanie

Xin lỗi - điều này hoàn toàn không hoạt động. Ngay cả với dữ liệu bắt buộc, nó cũng không đưa nó vào biểu mẫu.
Ciel

Nó không thể được đặt trong một trường mẫu.
Ciel

2
Nếu đó là một chuỗi, nó có thể được đặt trong một trường mẫu
PetersenDidIt

19

Bạn thậm chí có thể sử dụng cái này. làm việc tốt cho tôi

$("#registerform").attr("action", "register.php?btnsubmit=Save") 
$('#registerform').submit();

điều này sẽ gửi btnsubmit = Lưu dưới dạng giá trị GET vào biểu mẫu register.php.


Đây có vẻ như là một giải pháp thanh lịch hơn. Chỉ cần nhớ sử dụng encodeURIComponent()cho giá trị tham số tùy thuộc vào loại dữ liệu.
Andres SK

1
Điều này thực sự tốt hơn khi cho phép người dùng gửi biểu mẫu nhiều lần. Biểu mẫu sẽ không nhận được nhiều hơn một trường ẩn với các giá trị khác nhau.
Mellon

11

Bạn có thể viết một hàm jQuery cho phép bạn thêm các trường ẩn vào một biểu mẫu:

// 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 = $("<input>").attr("type", "hidden").attr("name", name).val(value);
        $(this).append($(input));
    });
};

Và sau đó thêm trường ẩn trước khi bạn gửi:

var frm = $("#form").addHidden('SaveAndReturn', 'Save and Return')
                    .submit();

1
Xem stackoverflow.com/questions/2601223/ cấp để biết phiên bản nâng cao hơn của addHidden
Jonathan

1
Tôi thích sự đơn giản của giải pháp này. Nó không xử lý nhiều trường hợp nhưng nó xử lý tốt trường hợp nó làm.
Phil

11

Bạn không cần phải liên kết sự kiện gửi khi nhấp vào nút gửi chỉ cần liên kết sự kiện gửi và nó sẽ nắm bắt sự kiện gửi không có vấn đề làm thế nào nó được kích hoạt.

Hãy nghĩ rằng những gì bạn đang muốn là gửi sắp xếp như bạn sẽ thông qua ajax. Hãy thử làm một cái gì đó như thế này:

var form = $('#event').submit(function () {
    $.each($('#attendance').sortable('toArray'),function(i, value){
        $("<input>").attr({
            'type':'hidden',
            'name':'attendace['+i+']'
        }).val(value).appendTo(form);
    });
});

vẫn không hiển thị trên biểu mẫu phía máy chủ ... đôi khi tôi phải làm gì đó đặc biệt để có một trường ẩn để hiển thị trên máy chủ? Nó đang đi qua C # / ASP.NET MVC bằng cách sử dụng một đối tượng FormCollection.
Ciel

Cập nhật câu trả lời của tôi, nghĩ rằng tôi đảm nhận những gì bạn đang cố gắng làm.
PetersenDidIt

Bạn có thêm một namethuộc tính cho đầu vào biểu mẫu ẩn được tạo không? Theo stackoverflow.com/questions/504681/, có vẻ như các đối tượng FormCollection yêu cầu tất cả các <input>thành phần phải có tên.
npdoty

Có, tôi đang cố gắng đẩy một sắp xếp vào bộ định dạng dưới dạng một chuỗi các giá trị được phân tách bằng dấu phẩy. Tôi đã thử cập nhật của bạn và nó vẫn không đăng. Tôi không chắc mình đang làm gì sai ... Tôi đánh giá cao sự giúp đỡ.
Ciel

Âm thanh như vấn đề không phải ở phía máy khách mà là phía máy chủ.
PetersenDidIt

2

Câu trả lời tương tự, nhưng tôi chỉ muốn làm cho nó có sẵn cho một bài kiểm tra dễ dàng / nhanh chóng.

var input = $("<input>")
               .attr("name", "mydata").val("go Rafa!");

$('#easy_test').append(input);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script>



<form id="easy_test">
  
</form>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.