cách thông thường của tôi thực hiện javascript biến trên rất nhiều yếu tố trong qua JQuery:HTML: onload cho các yếu tố phi cơ
<div class="cow"></div>
<script> $(".cow").doStuff() </script>
Tuy nhiên, hoạt động này là mong manh và dễ gãy: nó hoạt động trên giả định rằng trang chỉ được tải một lần. Một khi bạn bắt đầu vào Ajax và tải lại một phần, kiểu biến đổi toàn cục này sẽ phá vỡ hoàn toàn. Nó cũng không hoạt động nếu máy chủ muốn thực hiện một biến đổi khác nhau cho mỗi phần tử dựa trên một số dữ liệu serverside.
Tôi biết sự kiện onload
thực sự cho các yếu tố không phải body
không hoạt động. Một giải pháp là cung cấp tất cả các yếu tố ID/lớp và tham khảo chúng ngay lập tức bằng cách sử dụng JQuery:
<div id="cow"></div>
<script> $("#cow").doStuff() </script>
Tuy nhiên, điều đó thực sự lộn xộn; Tôi không thích nó chút nào, một phần vì mọi phần tử tôi đưa ra một ID làm ô nhiễm không gian tên toàn cầu của tôi. Tôi hiện đang cung cấp cho phần tử ID không hiệu quả một cách hiệu quả
<div id="id877gN0icYtxi"></div>
<script> $("#id877gN0icYtxi").doStuff() </script>
dựa trên số cơ sở ngẫu nhiên64. Tuy nhiên, tất cả điều này có vẻ như là một hack khổng lồ: Tôi có thể cung cấp cho các phần tử onclick
s và onmousedown
s và như vậy rất đơn giản bằng cách sử dụng các thuộc tính tương ứng của chúng, sau đó gọi hàm để chuyển đổi this
nhất định.
Bây giờ, tôi biết onload
không hoạt động. Tuy nhiên, có cách nào để mô phỏng chức năng của nó không? Cụ thể, tôi muốn có thể chạy mã javascript tham chiếu đến một thẻ cụ thể bằng cách sử dụng this
mà không phải chỉ định thẻ ID cho chúng.
EDIT: Về cơ bản tôi muốn một cái gì đó giống như
<input onclick="alert('moo')"/>
nhưng đối với onCreate; trường hợp sử dụng hiện tại của tôi là để lấp đầy một input
hoặc textarea
với văn bản, và tôi hiện đang thực hiện:
<input id="id877gN0icYtxi"/>
<script>$("#id877gN0icYtxi").val(...)</script>
nơi ...
là khác nhau cho mỗi hộp đầu vào, và do đó không thể được thực hiện dễ dàng bằng cách sử dụng "toàn cầu" jquery chuyển đổi . Mặt khác, tôi không thể chỉ đặt value
hoặc thuộc tính của input
khi tôi tạo nó vì nó có thể là textarea
và tôi sẽ không biết. Tôi muốn làm một cái gì đó như:
<input onload="$(this).val(...)"/>
Điều gì không hiệu quả, nhưng tôi ước. Một lần nữa, ...
được máy chủ đặt và khác nhau cho mỗi thẻ input
trên trang.
EDIT2:
Tôi cũng nhận thức của giờ JQuery thường được sử dụng để làm toàn bộ tài liệu biến trên rất nhiều yếu tố trong cùng một cách. Vấn đề là trong trường hợp này, mỗi phần tử đang được chuyển đổi theo cách cụ thể cho phần tử đó, do máy chủ quyết định. Trường hợp sử dụng cụ thể là mỗi trường có nội dung của nó được điền trước bởi $().val()
và mọi trường tự nhiên sẽ được lấp đầy với các nội dung khác nhau. Cung cấp cho mỗi thành phần ID duy nhất và sử dụng JQuery để thực hiện tìm kiếm toàn cầu để tìm lại yếu tố đó giống như một cách làm việc cực kỳ thú vị và tất nhiên sẽ bị phá vỡ khi bạn bắt đầu Ajaxing các phần của trang của bạn từ trong ra ngoài.
EDIT3:
Nói tóm lại, tôi muốn để có thể viết
<div onload="javascriptFunction(this)"/>
và đã javascriptFunction()
được chạy trên khi <div>
được tạo ra (cho dù đó là trên trang đầu tiên hoặc chèn qua ajax) và được thông qua <div>
làm thông số. Chỉ cần onclick
sẽ chạy javascriptFunction()
với <div>
làm thông số khi div được nhấp vào, tôi muốn điều tương tự xảy ra, nhưng khi <div>
được tạo/chèn vào DOM.
Tôi sẵn sàng chấp nhận bất kỳ số lượng tập lệnh thiết lập nào trong số <head>
để thực hiện điều này. Vì các lý do nêu trên, tôi không sẵn sàng thêm bất kỳ thẻ <script>
nào sau <div>
hoặc để thêm class
hoặc id
vào <div>
. Với những giới hạn này, cách tốt nhất có thể thực hiện để mô phỏng thuộc tính onload
cho các phần tử không phải là nội dung là gì?
Không nhận được câu hỏi của bạn .. –
Làm thế nào, chính xác, bạn có ý định xác định thẻ bạn đang cố gắng giải quyết không? Có một số cách để dịch tiêu chí của bạn thành mã, nhưng để giúp bạn tìm ra mã, trước tiên chúng ta cần phải biết tiêu chí của bạn. – dragon
Công cụ này http://docs.jquery.com/Plugins/livequery tuyên bố thực hiện những gì bạn muốn: "Truy vấn trực tiếp cũng có khả năng kích hoạt một hàm (gọi lại) khi nó khớp với phần tử mới và hàm khác (gọi lại) cho khi một phần tử không còn khớp nữa. " Tôi đã không tự thử nghiệm nó. –