2009-03-30 40 views
65

Làm thế nào để tạo một liên kết thuộc loại này:phương pháp link_to và nhấp vào sự kiện trong Rails

<a href="#" onclick="document.getElementById('search').value=this.value"> 

sử dụng phương pháp link_to trong Rails?

Tôi không thể tìm ra từ Rails docs.

+1

Trừ khi bạn vừa rời khỏi '#' cho ngắn gọn, dường như không có nhiều điểm trong việc sử dụng link_to. Tại sao không chỉ sử dụng một thẻ với tập hợp onclick như bạn đã làm ở trên. – Brian

Trả lời

170

Bạn có thể sử dụng link_to_function (loại bỏ trong Rails 4.1):

link_to_function 'My link with obtrusive JavaScript', 'alert("Oh no!")' 

Hoặc, nếu bạn hoàn toàn cần phải sử dụng link_to:

link_to 'Another link with obtrusive JavaScript', '#', 
     :onclick => 'alert("Please no!")' 

Tuy nhiên, việc đưa JavaScript ngay vào HTML được tạo của bạn là gây khó chịu và là thực hành không tốt.

Thay vào đó, mã Rails của bạn chỉ đơn giản nên có một cái gì đó như thế này:

link_to 'Link with unobtrusive JavaScript', 
     '/actual/url/in/case/javascript/is/broken', 
     :id => 'my-link' 

Và giả sử bạn đang sử dụng Prototype JS framework, JS như thế này trong bạn application.js:

$('my-link').observe('click', function (event) { 
    alert('Hooray!'); 
    event.stop(); // Prevent link from following through to its given href 
}); 

Hoặc nếu bạn' đang sử dụng jQuery:

$('#my-link').click(function (event) { 
    alert('Hooray!'); 
    event.preventDefault(); // Prevent link from following its href 
}); 

bởi usi Theo kỹ thuật thứ ba này, bạn đảm bảo rằng liên kết sẽ đi qua một số trang khác — không chỉ thất bại một cách im lặng — nếu JavaScript không khả dụng cho người dùng. Hãy nhớ rằng, JS có thể không khả dụng vì người dùng có kết nối internet kém (ví dụ: thiết bị di động, wifi công cộng), người dùng hoặc sysadmin của người dùng đã vô hiệu hóa hoặc xảy ra lỗi JS bất ngờ (tức là lỗi nhà phát triển).

+0

link_to_function không bị xóa nhưng được giới thiệu trong Rails 3. Tôi đoán bạn có nghĩa là link_to_remote. – dimir

+0

'link_to_function' đã có từ Rails 1.0, nhưng bạn nói đúng là nó không bị xóa; nó đã không được chấp nhận (và sau đó không được chấp nhận, và sau đó nó lộn một vài lần nữa). Tôi sẽ cập nhật câu trả lời của mình. Cảm ơn! –

+0

Nếu tôi có danh sách cổ phiếu và muốn thực hiện điều gì đó tương tự. Làm cách nào để tôi nhận được biểu tượng cổ phiếu vào hàm nhấp chuột? –

21

Để theo dõi về câu trả lời của Ron nếu sử dụng JQuery và đặt nó trong application.js hoặc phần đầu bạn cần phải bọc nó trong một phần sẵn sàng() ...

$(document).ready(function() { 
    $('#my-link').click(function(event){ 
    alert('Hooray!'); 
    event.preventDefault(); // Prevent link from following its href 
    }); 
}); 
+3

Lưu ý rằng điều này có thể được rút ngắn thành '$ (function() {...});', tương đương với '$ (tài liệu) .ready (function() {...}); ' – Confusion

+0

Nhân tiện [jquery 3.0] (http://api.jquery.com/ready/) khuyến nghị sử dụng '$ (function() { // Trình xử lý cho .ready() được gọi là. });' thay vì ** $ (document) .ready() ** –

+1

cho đường ray 5 với turbolinks sử dụng: $ (document) .on ('turbolinks: load', function() { – Brad

5

chỉ cần sử dụng

=link_to "link", "javascript:function()" 
Các vấn đề liên quan