2013-03-08 16 views
5

tôi có một danh sách được chuyển đến một trang và các phần tử được tạo khi chạy. Tôi muốn lặp qua các yếu tố này và tạo một số hành động cho từng phần tử. Dưới đây là mã của tôi: cho mỗi người được tạo ra từ danh sách này, tôi muốn tạo dấu kiểm trước cho người đó. Ai đó có thể giúp tôi i am chỉ nhận được séc xảy ra một lần:Jquery Lặp qua các phần tử được tạo tại thời gian chạy

jQuery:

$(document).ready(function() { 

    $("#userId").each(function(i){ 
     if ($("#userId").val != '') { 
      alert('not null' + i); 
     } 
    });     
}); 

JSP:

<c:forEach items="${person}" var="person"> 

<input= type="text" id="userId" value="${person.userid}" /> 
    First name:- ${person.fName} , Last Name:- ${person.lName} 
</c:forEach> 
+1

Bộ chọn id, như trạng thái tài liệu jquery: * Chọn một phần tử duy nhất có thuộc tính id đã cho. * Đó là bạn chỉ nhận được séc một lần. – EmCo

Trả lời

5

bạn không thể có nhiều yếu tố trên một trang với cùng id thuộc tính. hãy thử sử dụng các lớp học thay thế.

thử một cái gì đó như:

$(document).ready(function() { 

    $(".userId").each(function(i){ 
     if ($(this).val() != '') { 
      alert('not null' + i); 
     } 
    }); 
}); 

Một điều cần lưu ý là .val là một phương pháp, vì vậy bạn cần phải gọi nó là để có được những giá trị. Sử dụng .val() thay vì .val. Như bạn có mã của bạn bây giờ, $ (selector) .val là một hàm, do đó, nó sẽ không bao giờ là chuỗi rỗng bạn đang thử nghiệm nó chống lại.

Cũng JSP của bạn nên được một cái gì đó như:

<c:forEach items="${person}" var="person"> 

<input= type="text" class="userId" value="${person.userid}" /> 
    First name:- ${person.fName} , Last Name:- ${person.lName} 
</c:forEach> 
3

vòng lặp của bạn sẽ tạo ra nhiều yếu tố với cùng một ID, lần đầu tiên thay đổi điều đó. Thay vào đó, tốt hơn nên sử dụng tên lớp.

<c:forEach items="${person}" var="person"> 

    <input= type="text" class="user" id="userId-${person.userid}" value="${person.userid}" /> 
     <!--   ^Use Class &^Id to uniquely identify the user --> 
     First name:- ${person.fName} , Last Name:- ${person.lName} 
</c:forEach> 

Tiếp theo, bạn có thể sử dụng .find() để tìm phần tử được tạo động. Nhưng tôi khuyên bạn nên sử dụng các giải pháp của tôi bằng cách sử dụng thuộc tính class.

$(".user").each(function(i) { 
    if ($(this).val() != '') { 
      alert('not null' + i); 
    } 
}); 
+0

'.find' không có liên quan gì đến các yếu tố được thêm động. Nó chỉ là một cách để tìm ra con cháu của tập hợp các yếu tố phù hợp hiện tại. – Andbdrew

+0

@Andbdrew, Thực tế là vậy. Vui lòng kiểm tra để xác minh nó '.find()' có thể tìm các phần tử mới được thêm vào DOM. (Bạn có downvote tôi vì lý do đó?) – Starx

+0

Nó liên quan đến lý do tại sao tôi downvoted câu trả lời của bạn, nhưng có những lý do khác quá.OP không muốn đính kèm các sự kiện nhấp vào các thành phần này, vì vậy tập lệnh của bạn không trả lời câu hỏi. Ngoài ra, hãy xem tài liệu về .find tại đây http://api.jquery.com/find/. Nó không có gì để làm với các sự kiện thêm động. Nó chỉ cho phép bạn tìm kiếm trong tập hợp phù hợp hiện tại của bạn. Nó không phải là tuyên bố của bạn về tìm thấy là không chính xác, nó chỉ không có gì để làm với các vấn đề ở bàn tay. Điều đó có ý nghĩa đối với bạn? – Andbdrew

2

Như @Andbdrew đã nói, sử dụng một lớp thay vì id, vì nó sẽ ngừng tìm kiếm nhiều mục sau khi tìm thấy mục đầu tiên khớp với id.

Ngoài ra, bạn sẽ muốn sử dụng this thay vì $("#userId") bên trong chức năng của chúng tôi.

Vì vậy, làm một cái gì đó như thế này:

$(".userClass").each(function(i) { 
    if ($(this).val() != '') { 
     alert('not null' + i); 
    } 
}); 
+0

'.val' là một phương thức và cần được gọi là – Andbdrew

+0

Cảm ơn. Xin lỗi vì lỗi đánh máy.! – krillgar

1

Tại sao bạn không chọn với TAG bởi jQuery. Ví dụ nguyên tố này có danh sách người dùng của bạn là một bảng với tblUsers id sau đó bạn có thể itereate trên TRS runtime tạo hoặc TDs như sau:

$("#tblUsers tr").each(function(i){ 
     alert('td' + i); 
}); 

hơn nữa nếu bạn có đầu vào trong tds bạn có thể đi sâu trong việc lựa chọn như

$("tblUsers tr td input")