jquery lấy tất cả đầu vào từ biểu mẫu cụ thể


84

Có bất kỳ cách nào để điền tất cả các đầu vào từ một số hình thức nhất định? hãy nói, một số điều như thế này:

<form id="unique00">
  <input type="text" name="whatever" id="whatever" value="whatever" />
  <div>
    <input type="checkbox" name="whatever" id="whatever" value="whatever" />
  </div>
  <table><tr><td>
    <input type="hidden" name="whatever" id="whatever" value="whatever" />
    <input type="submit" value="qweqsac" />
  </td></tr></table>
</form>
<form id="unique01">
  <div>
    <input type="text" name="whatever" id="whatever" value="whatever" />
    <input type="checkbox" name="whatever" id="whatever" value="whatever" />
  </div>
  <table><tr><td>
    <input type="hidden" name="whatever" id="whatever" value="whatever" />
  </td></tr></table>
  <select>blah...</select>
  <input type="submit" value="qweqsac" />
</form>
etc forms... forms...

* lưu ý: mỗi biểu mẫu có thể có số lượng đầu vào và loại khác nhau và cấu trúc html cũng khác nhau

vậy có cách nào để điền đầu vào từ id biểu mẫu nhất định không? Ví dụ: nếu tôi nhấp vào nút gửi từ id biểu mẫu nhất định, thì jquery sẽ điền cho tôi tất cả thông tin đầu vào trong id biểu mẫu đó. hiện tại những gì tôi đang làm là như thế này:

$("form").submit(function(){ return validateForm($(this)) });
function validateForm(form){
var retVal = true;
var re;
$.each(form.serializeArray(), function(i, field) {
  var input = $('input[name='+field.name+']');
  field.value = $.trim(field.value);
  switch(field.name){
    case "name" :
        and another cases...
      }
    })
 }

đó là công việc, nhưng trong trường hợp đó, tôi chỉ nhận được field.name và field.value, và thực sự những gì tôi muốn là, tôi muốn một đối tượng jquery cho mỗi phần tử đầu vào, vì vậy tôi có thể truy cập css, id, name và thậm chí tạo hiệu ứng cho các yếu tố đầu vào đó

có cách nào cho việc này không?

xin vui lòng cho tôi biết và cảm ơn bạn trước! AnD

Câu trả lời:


180

Để lặp lại tất cả các đầu vào trong một biểu mẫu, bạn có thể làm như sau:

$("form#formID :input").each(function(){
 var input = $(this); // This is the jquery object of the input, do what you will
});

Điều này sử dụng bộ chọn jquery : input để nhận TẤT CẢ các loại đầu vào, nếu bạn chỉ muốn văn bản, bạn có thể làm:

$("form#formID input[type=text]")//...

Vân vân.


3
Tôi nghĩ: đầu vào hoạt động cho điều đó nhưng nếu không thì bạn có thể làm:$("form#formID input[type=text],form#formID select")
TJB

Lưu ý lỗi đánh máy trong câu trả lời đầu tiên của bạn ở trên. $ ( "từ sẽ là $ (" hình thức
Mitch

1
$("form#formID :input").eachinputloại đầu ra , selectloại và thậm chí buttonloại đầu vào. Ít nhất nó có trong mã của tôi.
TARKUS

3
@TARKUS inputvs :input. $ (": input") chọn tất cả các phần tử biểu mẫu jQuery. $ ("input") chỉ chọn các thẻ đầu vào.
Johnathan Elmore

25

Đoạn mã dưới đây giúp lấy thông tin chi tiết của các phần tử từ biểu mẫu cụ thể với id biểu mẫu,

$('#formId input, #formId select').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);

Đoạn mã dưới đây giúp lấy chi tiết của các phần tử từ tất cả các biểu mẫu được đặt trong trang tải,

$('form input, form select').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);

Đoạn mã dưới đây giúp lấy thông tin chi tiết của các phần tử được đặt trong trang tải ngay cả khi phần tử không được đặt bên trong thẻ,

$('input, select').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);

LƯU Ý: Chúng tôi thêm tên thẻ phần tử khác mà chúng tôi cần trong danh sách đối tượng như bên dưới,

Example: to get name of attribute "textarea",

$('input, select, textarea').each(
    function(index){  
        var input = $(this);
        alert('Type: ' + input.attr('type') + 'Name: ' + input.attr('name') + 'Value: ' + input.val());
    }
);

1
Tôi không nhận được giá trị của văn bản bằng cách sử dụng input.val () này .. bạn có thể giúp tôi điều đó được không?
DhavalThakor

Lỗi của tôi. Sory, tôi đã nhìn nhầm chỗ cho đầu ra.
DhavalThakor

3

Sử dụng thuộc tính "phần tử" của Biểu mẫu HTML :

$.each($("form").elements, function(){ 
    console.log($(this));
    });

Bây giờ không cần thiết phải cung cấp các tên như "input, textarea, select ...", v.v.


Dooh! - quá nhiều thông tin. Hãy thử một cách nhanh hơn để xem thông tin biểu mẫu $ ("form: input"). Each (function (index) {console.log (index, this.type, this.id, this.name, this.value, this.placeholder) );});
Jules Bartow
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.