2010-07-17 4 views
5
<a href="<?=$rowz[0]?>" onClick="countLinks('<?=$row[6]?>','<?=$indexl?>')">[Link <?=$j++?>]</a> 

Vấn đề là nó không hoạt động với nút giữa trên IE hoặc firefox. Trên thực tế, nút trung gian countLinks sử dụng nút giữa chỉ được gọi bằng chrome.Sự cố với nút onClick() và giữa trên chuột

Tôi nghĩ rằng tôi cần một hàm Jquery như sự kiện mouseup, chỉ cần tôi không biết cách gọi hàm đó, mà nó gọi là countLinks với các thông số tham số đó.

Bất kỳ trợ giúp nào?

+1

+ 1 cho ** rowz **. 1337! – jAndy

+0

có thể trùng lặp của [Sự kiện kích hoạt onclick sử dụng nhấp chuột giữa] (http://stackoverflow.com/questions/1795734/triggering-onclick-event-using-middle-click) – rds

Trả lời

6

Bạn nói đúng. Bạn cần sự kiện mousedown hoặc mouseup để xác định nút chuột nào thực sự được nhấp.

Nhưng trước hết, bạn cần loại bỏ trình xử lý sự kiện nội tuyến onclick và đi theo con đường sáng của javascript không phô trương.

Điều đó cho bạn cần phải cung cấp cho neo đó id hoặc class thẻ để xác định thẻ (Tất nhiên bạn cũng có thể chọn chọn neo đó bằng bộ chọn css). Cho phép giả sử chúng ta đã thêm một lớp học với tên myClazzz :)

javascript:

$(function(){ 
    $('.myClazzz').bind('mouseup', function(e){ 
     switch(e.which){ 
      case 1: 
       alert('Left Mouse button pressed.'); 
      break; 
      case 2: 
       alert('Middle Mouse button pressed.'); 
      break; 
      case 3: 
       alert('Right Mouse button pressed.'); 
      break; 
      default: 
       alert('You have a strange Mouse!'); 
     } 
    }); 
}); 

Thuộc tính which trong xử lý sự kiện mousedown/mouseup sẽ chứa một số mà chỉ có mousebutton được nhấp.

+2

+1 nhưng tại sao không 'click'? Bạn cũng có thể thấy nếu nút được nhấp trái, giữa hoặc phải ... Mouseous mousedown có thể hoạt động khác Qua trình duyệt. – Sinan

+0

@Sanan Y .: sự kiện javascript 'click' kết hợp 'mousedown' +' mouseup' và chỉ kích hoạt trên các lần nhấp nút bên trái. – jAndy

+0

uhm ... vì vậy tôi cần phải đặt cho mỗi trường hợp (1-2-3) một bản sao của cùng một chức năng? và làm thế nào tôi có thể vượt qua các thông số (như $ row [6] và $ indexl) cho chức năng đó? – markzzz

2

Đây là giải pháp nhanh cho bạn, bằng cách sử dụng một số html5 attributes ... Thực ra nó cũng có thể trước html5 nhưng nó không được xác thực.

Tôi muốn tạo ra các liên kết như sau:

<a class="myClazzz" href="<?=$rowz[0]?>" data-row="<?=$row[6]?>" data-index="<?=$indexl?>">...</a>

_here chúng tôi đặt các thông số của bạn để data thuộc tính

và viết js như thế này:

$(function(){ 
    //use mouseup, then it doesn't matter which button 
    //is clicked it will just fire the function 
    $('.myClazzz').bind('mouseup', function(e){ 
     //get your params from data attributes 
     var row = $(this).attr("data-row"), 
      index = $(this).attr("data-index"); 

     //and fire the function upon click 
     countLinks(row,index); 
    }); 
}); 
//don't forget to include jquery, before these lines;) 

Hy vọng điều này hoạt động t. Sinan.

PSmyClazzz -> tín dụng đi vào jAndy :)

+0

uoo. ..không thấy trước cú pháp đó trên liên kết (i có nghĩa là chỉ số dữ liệu var). tôi cần phải tìm hiểu nó :) ngày mai tôi sẽ kiểm tra chức năng đó, bây giờ ở Ý (3.00 am) đó là một chút muộn! tnx man – markzzz

+4

FYI: '$ (this) .data ('row')' giống với '$ (this) .attr ('data-row')' – WildlyInaccurate

1

Các hành vi của việc này là khá biến bởi trình duyệt. Xem https://code.google.com/p/chromium/issues/detail?id=255#c106. Theo đó, trong những người bạn hỏi về:

  • "IE không cháy, một sự kiện click nếu mục tiêu là một liên kết, nhưng không bắn nó nếu yếu tố khác được nhấp ngay cả khi đó là một hậu duệ của đường dẫn."

  • "Gecko luôn kích hoạt sự kiện nhấp chuột trên tài liệu có bong bóng và có nhắm mục tiêu yếu tố được nhấp."

Đối với Firefox, do đó bạn có thể làm:.

$(document).click(
    function (evt) { 
    // ... evt.which === 2 means middle click 
    } 
); 

đó là loại một thủ thuật (thông thường bạn sẽ nghe các sự kiện vào liên kết chính nó), nhưng nó hoạt động