2011-08-31 29 views
30

Tôi có một biểu mẫu có lựa chọn và một vài đầu vào văn bản. Tôi muốn gửi biểu mẫu khi lựa chọn được thay đổi. Điều này hoạt động tốt bằng cách sử dụng các mục sau:Javascript chọn onchange = 'this.form.submit()'

onchange="this.form.submit()" 

Tuy nhiên, nếu biểu mẫu này cũng không gửi khi biểu mẫu được thay đổi. Tôi đoán một số loại xung đột.

Tùy chọn của tôi ở đây là gì?

Tôi có nên sử dụng một cái gì đó như $(this.form).trigger("submit") để thay thế không?

+0

Cung cấp một testcase rằng cuộc triển lãm vấn đề này, để chúng ta có thể trả lời bạn mà không hoang dã đoán –

+6

Hãy chắc chắn rằng nút của bạn không có một tên hoặc thuộc tính id của "gửi", tôi đã thấy điều này là can thiệp trước đây. – GBa

+0

http://stackoverflow.com/questions/6736341/why-is-form-submit-not-working – SLaks

Trả lời

49

Bạn sẽ có thể sử dụng một cái gì đó tương tự như:

$('#selectElementId').change(
    function(){ 
     $(this).closest('form').trigger('submit'); 
     /* or: 
     $('#formElementId').trigger('submit'); 
      or: 
     $('#formElementId').submit(); 
     */ 
    }); 
10

Nếu bạn đang sử dụng jQuery, nó cũng đơn giản như thế này:

$('#mySelect').change(function() 
{ 
    $('#myForm').submit(); 
}); 
24

kỹ năng gỡ lỗi tâm linh của tôi nói với tôi rằng bạn nộp có tên là submit.
Do đó, form.submit đề cập đến nút chứ không phải là phương pháp.

Đổi tên nút thành một cái gì đó khác để form.submit đề cập đến phương pháp một lần nữa.

+3

Làm thế nào để bạn biết điều đó? –

+1

@Tomalak: Tôi chỉ đoán thôi. Điều này đã xuất hiện nhiều lần trước đó; nó phù hợp với vấn đề của mình một cách hoàn hảo. – SLaks

+1

OK; có lẽ câu trả lời của bạn nên nói "** Có lẽ ** nút gửi của bạn có tên là' submit' ". –

0

Liên kết chúng bằng jQuery và làm cho jQuery xử lý nó: http://jsfiddle.net/ZmxpW/.

$('select').change(function() { 
    $(this).parents('form').submit(); 
}); 
+2

Nếu jQuery đã được sử dụng thì đó là một tùy chọn – mplungjan

+1

@mplungjan: Nhưng anh ấy đang nói về '$(). Trigger'. Tôi cho rằng anh ta đã sử dụng jQuery. – pimvdb

+1

Tôi nhận thấy sau khi tôi nhận xét. Vui lòng xem nhận xét cập nhật của tôi – mplungjan

5

Có một số cách có thể hoàn thành.

Các yếu tố biết chúng thuộc về loại nào, vì vậy bạn không cần phải bọc this trong jquery, bạn chỉ có thể gọi this.form trả về phần tử biểu mẫu. Sau đó, bạn có thể gọi số submit() trên phần tử biểu mẫu để gửi.

$('select').on('change', function(e){ 
    this.form.submit() 
    }); 

tài liệu: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement

+1

Đây là câu trả lời hay nhất. Bạn không phải luôn luôn làm * mọi thứ * trong jQuery - bạn có thể mix'n'match nếu thích hợp. –

0

Sử dụng:

<select onchange="myFunction()"> 

    function myFunction() { 
     document.querySelectorAll("input[type=submit]")[0].click(); 
    } 
Các vấn đề liên quan