2010-10-30 37 views
10

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à

+2

Đâ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? –

Trả lời

6

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.

19

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> 
4

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 đó.

+0

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ị. –

+0

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ế. –

+0

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". –

Các vấn đề liên quan