2013-07-03 47 views
23

Có rất nhiều câu hỏi dường như hỏi điều này, nhưng cuối cùng tất cả những gì họ muốn là đính kèm sự kiện .click và không .each và vì vậy câu trả lời được chấp nhận chung trong tất cả chúng bao gồm $("body").on("click", ".selector", function(){}); và điều này chắc chắn không phải là những gì tôi muốn.Sử dụng .each trên các đối tượng động trong jQuery?

Tôi có một số yếu tố đầu vào được tạo và tôi cần thay đổi giá trị của từng tài khoản cùng một lúc. Thông thường tôi sẽ $(".inputs").each(function(){$(this).val("new-value")}; hoặc một cái gì đó dọc theo những dòng, tuy nhiên, tôi không thể vì khía cạnh năng động.

Vậy bạn sẽ làm như thế nào $("body").on("each", ".inputs", function(){});?

+1

Tại sao nó quan trọng nếu chúng là động? – Esailija

+5

Nó sẽ giúp ích nếu bạn giải thích rõ hơn về tình hình, bởi vì khi nó đứng thì câu hỏi này không có ý nghĩa gì nhiều. – Pointy

+1

"vì khía cạnh động" tại một số điểm bạn muốn thay đổi giá trị ... khi nào? –

Trả lời

5

Trên thực tế, nó đơn giản như chạy .each bên setTimout.

setTimeout(function(){ 
    $(".inputs").each(function(){$(this).val("new-value")}); 
}, 5000); 
+0

Chúng ta gần như có cùng một câu hỏi và suy nghĩ về ban đầu vì .each không thể tìm thấy các phần tử mới được chèn vào. Bạn có thể cung cấp thêm chi tiết về lý do tại sao setTimeout thực hiện phép thuật như .on cho các phần tử được chèn động không? – user938363

+0

setTimeout chạy mã sau một khoảng thời gian cụ thể. Vì vậy, nếu setTimeout đủ dài để chạy sau khi các phần tử được chèn vào của bạn, thì nó sẽ hoạt động. Nếu nó chạy trước khi các phần tử của bạn được chèn vào, thì nó sẽ không hoạt động. Trong trường hợp người dùng sẽ tương tác với màn hình, tốt nhất là không nên làm bất cứ điều gì giống như tôi đã nói ở trên vì tôi đang thực hiện tải. Nếu bạn đặt chức năng của mình trong một tập lệnh khác và sau đó chạy, bạn nên ổn định sau khi tất cả tương tác của người dùng được hoàn tất. –

2

Bạn có thể sử dụng $(".inputs").each(function(){$(this).val("new-value")}; hoàn toàn tốt trên các yếu tố động. Bạn chỉ cần chạy lại tập lệnh sau khi bạn thêm phần tử động.

Từ nhận xét, tôi nhận thấy rằng một số hiểu lầm tồn tại về 'mỗi'. 'Mỗi' không phải là một sự kiện và do đó không có sự kiện nào được kích hoạt nếu 'mỗi' được gọi. Nếu bạn muốn theo dõi các yếu tố bổ sung bởi vì bạn không kiểm soát được khi chúng được bổ sung bạn cần một bộ đếm thời gian:

setInterval(function(){ $(".inputs").each(function(){$(this).val("new-value")}; },500); 
+0

Ông * có thể * làm điều đó, nhưng tại sao, khi '$ (". Đầu vào "). Val (" giá trị mới ");' hoạt động quá? – Pointy

+0

Nếu bạn không thể chạy lại nó thì sao? I E. sử dụng những lợi ích của body.on? –

+0

@Pointy Tôi cho rằng anh ta đã đơn giản hóa tập lệnh đó, nhưng thực sự muốn đặt giá trị cho một cái gì đó khác với mỗi đầu vào. Tại o_O, nếu bạn có thể thêm phần tử động, bạn có thể chạy lại tập lệnh đó. Bạn sẽ thêm các phần tử động như thế nào? Một số kịch bản là cần thiết cho quyền đó? –

3

$.each làm việc với bất kỳ yếu tố mới được thêm vào.

http://jsfiddle.net/4SV7n/

Làm một cái gì đó khác nhau mỗi lần:

http://jsfiddle.net/4SV7n/1/

+1

Vâng tất nhiên là có hiệu quả. Sẽ rất dễ dàng nếu tôi có sự gọi điện thoại sang trọng bất cứ khi nào tôi muốn. Thật không may, điểm cần thiết .on lợi ích là tôi không có quyền kiểm soát đó. –

+0

Bạn có thể tạo ra một câu đố là một loại nỗ lực nào đó với những gì bạn đang nói đến để nó rõ ràng hơn không? Tôi đang gặp khó khăn trong việc tìm ra những gì bạn đang cố gắng làm. –

+0

điều này là bởi vì bạn đang gọi nó khi nhấp vào cái gì nếu chúng ta cần kích hoạt chức năng mà không có sự kiện nào –