2012-04-19 19 views
5

Tôi đã sauxử lý sự kiện sao chép từ một tập hợp các yếu tố với nhau sử dụng jQuery

var $header = $('.inner th'); 
var $fixedHeader = $(".header1 th"); 

    $header.each(function (index) { 
      // i need to copy all events from $header[index] to $fixedHeader[index] 
    }); 

Làm thế nào để sao chép các xử lý sự kiện (onClick, onDblClick..etc) từ các yếu tố trong tập đầu tiên đến yếu tố lân cận trong tập thứ hai ?? Tôi mới làm quen với việc quấy rầy và gặp khó khăn.

+0

Bạn có ý nghĩa gì với "sự kiện"? –

+0

onlcick, ondblclick ... etc –

+0

Ah, OK. Bạn có nghĩa là trình xử lý _event_. –

Trả lời

2

Bạn cần sử dụng phương thức .data('events') của jquery.

Tôi đã cung cấp một jsFiddle đang hoạt động để có ý tưởng về nơi bắt đầu.

http://jsfiddle.net/hx8gf/2/

Tôi biết Alphamale đánh tôi, nhưng tôi vẫn sẽ đăng nó trong trường hợp nó rất hữu ích.

nó gần như giống hệt anyway ...

+0

Vì một số lý do mã của @AlphaMale không hoạt động. bạn đã làm tốt. Tôi đã thêm mã bạn đăng trong jsFiddle trong câu trả lời .. cảm ơn bạn đời. –

+0

+1 cho fiddle, Chúc mừng ... :) – AlphaMale

2

Một số điều như thế này có thể giúp:

var header = $('.inner th'); 
var fixedHeader = $(".header1 th"); 

header.each(function (index) { 

    var events = $(header).data("events"); //Gives you all events of an element 

    $.each(events, function(i, event) { //Loop through all the events 

    $.each(event, function(j, h) { //Loop through all the handlers attached for a event 

     fixedHeader.bind(i, h.handler); //Bind the handler with the event 

    }); 

    }); 

}); 

Hope this helps.

+0

Được thăng hạng cho hương vị. – Ohgodwhy

+0

không hoạt động, tôi không thể thấy nơi bạn liên kết trình xử lý với phần tử "Liền kề" ... –

+0

fixedHeader.bind (i, h.handler); Dòng này liên kết tất cả các trình xử lý sự kiện của tiêu đề với tiêu đề cố định. phải không ?! – AlphaMale

0

Chiếc máy nhái (true) hàm trong jquery không thể sao chép xử lý sự kiện, nhưng nó chỉ có thể sao chép element.If bạn muốn sao chép nó, nó sắp sửa thêm một sự kiện ràng buộc. Bạn có thể xem xét sự kiện ràng buộc của JQUERY. Gọi hàm ràng buộc trong hàm gọi lại. điều này có thể hữu ích.

+0

Tôi đã đọc hàng giờ và không thể .. toàn bộ điều jquery không phải là 'ràng buộc' với bộ não của tôi! –

5

Tôi biết điều này đã được trả lời một vài lần, nhưng đây là giải pháp bao gồm tất cả, dựa trên các giải pháp trước đó.

function copyEvents(source, destination) { 
    var events; 

    //copying from one to one or more 
    source = $(source).first(); 
    destination = $(destination); 

    //get all the events from the source 
    events = $(source).data('events'); 
    if (!events) return; 

    //make copies of all events for each destination 
    destination.each(function() { 
     var t = $(this); 
     $.each(events, function(index, event) { 
      $.each(event, function(i, v) { 
       t.bind(v.type, v.handler); 
      }); 
     }); 
    }); 
} 
Các vấn đề liên quan