Tôi đang gọi một hàm trong chính phần tử thông qua một thuộc tính onclick vì tôi cần php để tự động đưa ra một giá trị trong một trong các tham số hàm. Khi tôi cố gắng tham khảo phần tử gọi trong hàm thông qua "$ (this)", nó kết thúc tham chiếu toàn bộ cửa sổ chứ không phải phần tử. Làm thế nào để sửa lỗi này?Jquery: Chọn phần tử có tên là
Trả lời
Tôi nghi ngờ bạn thực sự cần sử dụng thuộc tính nội tuyến onclick
. Bạn có thể lưu trữ dữ liệu trong một phần tử theo nhiều cách khác nhau. Thật khó để nói chính xác làm thế nào bạn sẽ làm điều đó mà không biết những gì các thông số bạn cần phải vượt qua được, nhưng tôi sẽ đưa ra một số ví dụ.
Các linh hoạt nhất có lẽ sẽ là một thuộc tính data-
:
<a href="#" id="subject" data-type="fiction">Text</a>
Sau đó, bạn có thể truy cập thông tin theo cách sau:
$(document).ready(function(){
$('#subject').click(function(){
$type = $(this).data('type'); // this works as of jQuery 1.4.3, otherwise $(this).attr('data-type');
// do your handling here, using $type
});
});
Bạn cũng có thể làm được điều này các lớp học sử dụng, thẻ script tạo các biến toàn cục, tất cả các loại phương thức. Những điều này gần như chắc chắn sẽ tốt hơn việc đặt các trình xử lý jQuery trong các thuộc tính onclick
.
Cố gắng gửi yếu tố của bạn như một tham số để chức năng của bạn như thế:
<input type="text" onclick="myfunction(this);"></input>
chức năng của bạn nên là:
<script>
function myfunction(currentElement){
// ...
}
</script>
Giải pháp là để lưu trữ các giá trị động trong một thuộc tính tùy chỉnh, không phải là một trình xử lý onclick. Đặc tả HTML định nghĩa bất kỳ thuộc tính nào bắt đầu bằng "data-" làm dữ liệu tùy chỉnh được sử dụng chính xác cho những thứ như thế này và nó nằm trong spec để nó sẽ xác nhận hợp lệ. Vì vậy, bạn có thể làm một cái gì đó như thế này (sử dụng PHP ví dụ, điều chỉnh cho phù hợp):
<input type="text" id="some-input" data-some-dynamic="<?php echo $something; ?>">
Sau đó lấy trong javascript như sau:
$(document).ready(function() {
$('#some-input').click(function() {
// $(this) -- is the input element
// $(this).attr('some-dynamic-attribute') -- contains the dynamic data you need
});
});
Tôi nghĩ rằng phương pháp này là vượt trội so với sử dụng bộ xử lý thuộc tính như onclick = "", đơn giản vì nó chắc chắn hơn từ quan điểm thiết kế; tách mối quan tâm và tất cả những điều đó.
Cảm ơn bạn đã nghĩ ra câu trả lời. Mặc dù không nhất thiết là những gì tôi cần, một phương pháp rất thú vị. –
Allen - câu trả lời này giống như câu trả lời cho bạn cùng với một giải pháp thay thế. –
Câu trả lời này ban đầu có hai lựa chọn thay thế, nhưng vì HTML5 hiện được hỗ trợ trong số tất cả các trình duyệt hiện đại, tôi đã cập nhật câu trả lời chỉ bao gồm giải pháp "data-X". –
- 1. Phần tử Jquery + hiệu suất chọn lớp
- 2. jQuery - Tìm phần tử chọn tiếp theo
- 3. jQuery: Chọn một phần tử chỉ khi nó không có tên lớp
- 4. Cách chọn phần tử html có hai tên lớp?
- 5. Jquery chọn phần tử tiếp theo
- 6. jQuery chọn phần tử liền kề
- 7. Tên thẻ jQuery của phần tử
- 8. jQuery chọn các phần tử tùy chọn theo giá trị
- 9. Trình duyệt chéo Chọn các phần tử theo tên lớp
- 10. Chọn các phần tử có id lạ
- 11. jquery lấy phần tử con trỏ là
- 12. Chọn phần tử có phần tử khác là con trực tiếp
- 13. Có phần tử tên XSLT không?
- 14. Sử dụng JQuery để chọn phần tử mẹ của "this" (phần tử được nhấp)
- 15. Lấy các phần tử theo tên lớp bên trong một phần tử khác bằng jQuery
- 16. Bắt một bộ chọn jQuery cho một phần tử
- 17. Phần tử chọn jQuery nếu thuộc tính * any * khớp với
- 18. jQuery: Nhận một trong các bộ phần tử đã chọn
- 19. Tìm phần tử theo bộ chọn kiểu trong jquery
- 20. Cách lấy Phần tử DOM từ Bộ chọn JQuery
- 21. Cách chọn phần tử động với JQuery theo id
- 22. Chỉ chọn một phần tử trong bộ sưu tập jQuery
- 23. cách chọn: sau khi sử dụng phần tử jquery
- 24. Chọn phần tử với một lớp duy nhất trong JQuery
- 25. Chỉ xóa phần tử đầu tiên khỏi lựa chọn jquery
- 26. Làm thế nào để chọn nhiều phần tử với jQuery
- 27. jquery: chọn tất cả các phần tử sau nth
- 28. jQuery chọn các phần tử ở "cấp độ" thứ nhất
- 29. cách lấy các phần tử theo tên bằng jquery?
- 30. Phần tử 'Chọn' có thể chỉnh sửa
Đây là một câu hỏi hay và trong khi các câu trả lời được cung cấp gợi ý một số cách giải quyết, không có giải pháp nào trong số đó giải quyết câu hỏi gốc. Tôi cũng muốn biết câu trả lời. Tại sao anh ta nhận được cửa sổ cho $ (this), thay vì phần tử được nhấp? –