2009-01-06 6 views
43

Tôi muốn kích hoạt các sự kiện nộp dạng các yếu tố hiện nay là trong Một phương pháp Ta biết công việc đôi khi là:.Có một giải pháp jQuery tốt hơn cho this.form.submit() ;?

this.form.submit(); 

Tôi đang tự hỏi nếu có một giải pháp tốt hơn, có thể sử dụng jQuery, như tôi Phương thức chắc chắn không hoạt động 100% trong mọi trình duyệt.

Edit:

Tình hình tôi có được, như sau:

<form method="get"> 
    <p><label>Field Label 
     <select onchange="this.form.submit();"> 
      <option value="blah">Blah</option> 
      .... 
     </select></label> 
    </p> 
</form> 

Tôi muốn để có thể gửi biểu mẫu về biến đổi của <select>.

Điều tôi đang tìm kiếm là giải pháp hoạt động trên bất kỳ trường nào trong bất kỳ biểu mẫu nào mà không biết id hoặc tên trên biểu mẫu. $('form:first')$('form') sẽ không hoạt động vì biểu mẫu có thể là thứ ba trên trang. Ngoài ra, tôi đang sử dụng jQuery trên trang web đã có, do đó, bằng cách sử dụng một chút jQuery không phải là một việc lớn.

Vì vậy, có cách nào để jQuery truy xuất biểu mẫu đầu vào/select/textarea không?

+0

Phương thức bạn đăng luôn hoạt động đối với tôi. –

+0

Có, tại sao điều này không làm việc.form.submit()? – marcovtwout

Trả lời

101

Tôi nghĩ rằng những gì bạn đang tìm kiếm là một cái gì đó như thế này:

$(field).closest("form").submit(); 

Ví dụ, để xử lý các sự kiện onchange, bạn sẽ có điều này:

$(select your fields here).change(function() { 
    $(this).closest("form").submit(); 
}); 

Nếu vì một lý do bạn không sử dụng jQuery 1.3 trở lên, bạn có thể gọi parents thay vì closest.

+3

sử dụng gần nhất ("biểu mẫu") thay vì cha mẹ ("biểu mẫu"). cha mẹ() được tất cả các bậc cha mẹ của các yếu tố đó là hình thức, gần nhất() dừng lại ăn hình thức đầu tiên đó là cha mẹ của các yếu tố – TeKapa

+2

@ TeKapa: Cảm ơn. jQuery 1.3 (bổ sung chức năng 'gần nhất') xuất hiện một tuần sau khi tôi trả lời câu hỏi. –

0

Trong JQuery bạn có thể gọi

$("form:first").trigger("submit") 

Không biết nếu đó là tốt hơn nhiều. Tôi nghĩ form.submit(); khá phổ biến.

3

Bạn có thể luôn JQuery-ize form.submit của bạn, nhưng nó chỉ có thể gọi cùng một điều:

$("form").submit(); // probably able to affect multiple forms (good or bad) 

// or you can address it by ID 
$("#yourFormId").submit(); 

Bạn cũng có thể attach chức năng sự kiện nộp, nhưng đó là một khái niệm khác nhau.

+0

Câu hỏi nói rằng anh ta không muốn làm điều này – Amala

+1

Nó chắc chắn hiện nay. Đó là trong bản chỉnh sửa diễn ra vào ngày sau khi câu trả lời của tôi được gửi. – patridge

24
this.form.submit(); 

Đây có lẽ là đặt cược tốt nhất của bạn. Đặc biệt nếu bạn chưa sử dụng jQuery trong dự án của bạn, không cần phải thêm nó (hoặc bất kỳ thư viện JS nào khác) chỉ cho mục đích này.

1

Câu hỏi của bạn có phần khó hiểu ở chỗ bạn không giải thích ý nghĩa của "yếu tố hiện tại".

Nếu bạn có nhiều biểu mẫu trên trang có tất cả các loại yếu tố đầu vào và nút loại "gửi", sau đó nhấn "enter" khi điền bất kỳ trường nào sẽ kích hoạt gửi biểu mẫu đó. Bạn không cần bất kỳ Javascript ở đó.

Nhưng nếu bạn có nhiều nút "gửi" trên biểu mẫu và không có đầu vào nào khác (ví dụ: nút "chỉnh sửa hàng" và/hoặc "xóa hàng" trong bảng), thì dòng bạn đăng có thể là cách để thực hiện .

Cách khác (không cần Javascript) có thể là cung cấp các giá trị khác nhau cho tất cả các nút của bạn (có loại "gửi"). Như thế này:

<form action="..."> 
    <input type="hidden" name="rowId" value="..."> 
    <button type="submit" name="myaction" value="edit">Edit</button> 
    <button type="submit" name="myaction" value="delete">Delete</button> 
</form> 

Khi bạn bấm vào nút chỉ có biểu mẫu chứa nút sẽ được gửi và chỉ giá trị nút bạn nhấn sẽ được gửi (cùng với giá trị đầu vào khác).

Sau đó trên máy chủ bạn chỉ cần đọc giá trị của biến "myaction" và quyết định việc cần làm.

3

Tương tự như Matthew's câu trả lời, tôi chỉ thấy rằng bạn có thể làm như sau:

$(this).closest('form').submit(); 

sai: Vấn đề với việc sử dụng các chức năng cha mẹ là lĩnh vực cần phải được ngay lập tức trong biểu mẫu để làm việc (không bên trong tds, nhãn, v.v.)

Tôi đã sửa: phụ huynh s (với một s) cũng hoạt động. Thxs Paolo để chỉ ra điều đó.

+0

với cha mẹ ('form') những gì bạn nói có thể đúng, nhưng với parentS ('form') nó sẽ hoạt động ngay cả khi trường đó nằm trong một td, v.v. –

+0

Cha mẹ sẽ không ('form') trả về tất cả hình thức là cha mẹ của yếu tố này? Điều đó có khả năng sẽ gửi một biểu mẫu bên ngoài mà bạn chưa định gửi. – StriplingWarrior

+0

Chỉ cần đi qua này và muốn thêm rằng bạn không nên có các hình thức trong các hình thức. Điều này không hợp lệ và sẽ không hoạt động trong IE. Vì vậy, bằng cách sử dụng 'cha mẹ (" hình thức ")' là hoàn toàn chấp nhận được, mặc dù tôi không biết làm thế nào hiệu quả nó được so sánh với 'gần nhất (" hình thức ")'. – ClarkeyBoy

0
<form method="get"> 
    <p><label>Field Label 
     <select onchange="this.form.submit();"> 
     <option value="blah">Blah</option> 
      .... 
    </select> 
    </label> 
    </p> 
    **<!-- <input name="submit" type="submit" /> // name="submit_new_name" -->** 
    </form> 

<!-- 

    this.form.submit == this.form.elements['submit']; 

--> 
2

Tôi đã tìm thấy rằng việc sử dụng jQuery giải pháp tốt nhất là

$(this.form).submit() 

Sử dụng tuyên bố jquery này plugins (ví dụ jquery form plugin) hoạt động một cách chính xác và jquery DOM vượt qua chi phí được giảm thiểu.