2009-09-02 32 views
17

Tôi đang cố gắng ngăn A HREF thực sự mở liên kết, nhưng để thực thi tập lệnh. Tôi nhận kịch bản phần làm việc, nhưng có vẻ như Firefox sẽ chỉ cần bỏ qua này:preventDefault sẽ không hoạt động trên Firefox

$("#permalink a").click(function(id){ 
    $("#newPost").fadeToggle; 
    event.preventDefault(); 
    var id = this.getAttribute('href'); 
    $("#newPostContent").load(id); 
    $("#newPost").show("fast"); 
}); 

bất cứ ai có thể đề xuất một kịch bản qua trình duyệt mặc định để ngăn ngừa?

Trả lời

28

Giải pháp tiêu chuẩn cho việc này là return false từ trình xử lý click(). return false tương đương với số điện thoại preventDefault()stopPropagation() trong sự kiện. preventDefault() là đủ cho tác vụ này quá nên hoặc là return false sẽ hoạt động.

Sự cố của bạn có vẻ là lỗi cú pháp và tham số sai. Tôi thấy:

  • fadeToggle không có dấu ngoặc đơn;
  • thông số chức năng được gọi là id nhưng bạn gọi số event.preventDefault(); và
  • Bạn đang làm mờ bài đăng và sau đó hiển thị ngay lập tức? Điều đó sẽ xếp hàng hai hình động nhưng không có nhiều ý nghĩa. Bạn có thể muốn kết nối hai thứ đó với nhau và load() một cách hợp lý.

Vì vậy, điều này sẽ làm việc:

$("#permalink a").click(function(event) { 
    $("#newPost").fadeToggle(); 
    var id = this.getAttribute('href'); 
    $("#newPostContent").load(id); 
    $("#newPost").show("fast"); 
    return false; 
}); 

Bạn có thể tự do thay thế return false với event.preventDefault() trong trường hợp này nhưng click() sự kiện tuyên truyền có thể hoặc có thể gây ra các vấn đề khác tùy thuộc vào những gì xử lý sự kiện khác mà bạn có.

+0

Cảm ơn sự giúp đỡ của bạn. –

+0

"Này chuyện gì đang diễn ra ở bên này?" – Steerpike

+10

Đó không phải là vấn đề ở đây. Vấn đề là .click (function (id) {nên là .click (function (event) {. – karim79

-1

Bạn chỉ có thể return false;

+3

"Quay lại bạn đi câu trả lời, để chờ cho một người hỏi với thị hiếu ít sành điệu hơn." – Steerpike

12
  $("#permalink a").click(function(id){ 

nên

  $("#permalink a").click(function(event){ 

Sau đó

var id=event.target; 

sẽ cung cấp cho bạn các đối tượng bạn đang làm việc trên, và event.preventDefault() sẽ dừng hành động mặc định.

Thông thường tôi trả về false; bản thân tôi, nhưng điều này cả hai ngăn chặn các hành động mặc định dừng tuyên truyền sự kiện, điều này có thể có các hiệu ứng bạn không mong đợi với các trình xử lý sự kiện khác.

+0

... thực sự, tôi lưu ý rằng bạn chuyển 'id' vào nhưng nó bị ghi đè bởi thuộc tính tìm nạp của bạn. Tốt hơn nữa, biến 'id' không phải là id khi được chuyển vào (đó là sự kiện obj mặc dù tôi cho rằng bạn đã nghĩ nó đó là đối tượng DOM) và cũng không phải khi bạn nhận được attr (sau đó, đó là một URI) .Thêm dấu ngoặc còn thiếu trong cuộc gọi fadeToggle của bạn nói với tôi rằng bạn cần đọc mã bạn đã viết kỹ hơn trước khi bắt đầu trỏ Các ngón tay ở thư viện jQuery – ijw

+0

Tôi thực sự muốn đây là câu trả lời chính xác đã chọn: '( – Cassie

19

Điều này luôn hoạt động: Firefox cần "trình xử lý sự kiện", Chrome thì không. Điều này hoạt động trên tất cả các trình duyệt:

$('#id_obj').click(function(event) { 
    event.preventDefault(event); 
} 
+1

event.preventDefault (event) nên là event.preventDefault() - không phải tham chiếu jquery hoặc tham chiếu dom cho rằng phương thức preventDefault chấp nhận tham số. Trước đây có lẽ là không liên quan vì nó là sự kiện dom được bắn cuối cùng – B5A7

+0

Điều này làm việc cho tôi –

+0

Đối với tôi, đó là sự kiện 'không được chuyển vào hàm nhấp chuột, Vì vậy, chỉ cần thay đổi nó từ '$ ('id_obj'). click (function() {' to '$ ('# id_obj'). click (function (event) {' đã làm các trick. Việc chuyển 'event' vào phương thức' preventDefault' không thay đổi gì cả. –

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