2014-11-04 13 views
8

nộp Tôi có một chức năng .click() trên một nút gửi trong một hình thức:jquery nhấp chuột() trong nút

$("#submitId").click(function() { 
    $('#hiddenInput').val(someVariable); 
}); 

Nó hoạt động như một nét duyên dáng. Khi nhấn nút gửi, hàm click() sẽ điền vào biến đầu vào bị ẩn và sau đó toàn bộ biểu mẫu được gửi đi. Máy chủ sau đó nhận đầu vào bị ẩn với nội dung được làm mới.

Câu hỏi của tôi là: nó sẽ luôn hoạt động? Có bất kỳ nguy hiểm nào, bởi một lý do nào đó chưa được biết đến với tôi, thao tác đệ trình được thực thi đầu tiên và hàm click() sau đó? Tôi muốn đảm bảo rằng đầu vào bị ẩn luôn được làm mới.

+0

$ ("biểu mẫu"). Submit(); sẽ bỏ qua điều đó, người dùng có thể thực hiện cuộc gọi từ bảng điều khiển hoặc url của họ. –

+0

Và tôi cho rằng nó cũng có thể bị bỏ qua khi chỉ cần nhấn ENTER để gửi biểu mẫu? Hãy thử một lần. –

+2

@JamesBlond - Enter sẽ vẫn khiến trình xử lý nhấp chuột thực thi. –

Trả lời

4

Nó sẽ là tốt nhất để đính kèm các bản cập nhật giá trị trực tiếp đến nộp xử lý của hình thức như thế này

$("#submitId").closest("form").submit(function() { 
$('#hiddenInput').val(someVariable); 
}); 
+0

Đây là nó. Một sự kiện gửi có thể được kích hoạt theo nhiều cách khác nhau. Thay vì cố gắng đoán cách người dùng có thể kích hoạt sự kiện gửi (nhấn? Nhấn?), Chỉ cần đính kèm trình xử lý của bạn trực tiếp vào gửi biểu mẫu. –

+0

Điều này sẽ không hoạt động nếu nút gửi được nhúng trong một số phần tử bên trong biểu mẫu. Tôi sẽ sử dụng '.closest ('form')' thay vì '.parent ('form')'. – PeterKA

+0

@PeterKA - Vâng, đó là một điểm tốt. Đã chỉnh sửa 'parent' thành' gần nhất'. –

0

Các .click() nên luôn luôn được chạy đầu tiên.

+0

Thêm nhận xét hơn câu trả lời. Ít nhất cung cấp một số nguồn để sao lưu đó. –

19

Khi làm việc với các hình thức, đó là luôn nên để cho các nút submit làm điều đó là công việc: TRIGGER HÌNH THỨC CỦA SUBMIT EVENT ... đó là những gì nó có nghĩa là cho. Sau đó, bạn sẽ lắng nghe sự kiện submit trên form thay vì sự kiện click trên nút submit.

Bạn có thể sử dụng event.preventDefault() để ngăn việc gửi biểu mẫu mặc định để bạn có thể thực hiện một số giữ nhà sau đó bạn có thể gửi biểu mẫu.

$("#submitId").closest('form').on('submit', function(event) { 
    event.preventDefault(); 
    $('#hiddenInput').val(someVariable); //perform some operations 
    this.submit(); //now submit the form 
}); 

Hoặc đơn giản,

$('form').on('submit', function(event) { 
    event.preventDefault(); 
    $('#hiddenInput').val(someVariable); //perform some operations 
    this.submit(); //now submit the form 
}); 
+0

Điều này không hoạt động nếu nút gửi của bạn sử dụng 'formaction'. Tôi khuyên bạn nên kích hoạt nút gửi với sự kiện 'click' hoặc gán giá trị' formaction' cho thuộc tính 'action' của biểu mẫu và sau đó kích hoạt sự kiện' submit'. – KevinAdu

+0

@ kevinAdu ý của bạn là gì? Bạn có một bản demo để minh họa mối quan tâm của bạn? Cảm ơn bạn. – PeterKA

2

Cá nhân tôi nghĩ rằng đó là an toàn hơn để ngăn chặn gửi, sau đó thiết lập giá trị của đầu vào cần thiết và chỉ sau đó gửi biểu mẫu lập trình. Giống như:

$("form").submit(function (e) { 
    e.preventDefault(); 
    $('#hiddenInput').val(someVariable); 
    $(this).submit(); 
}); 
Các vấn đề liên quan