2010-05-19 28 views
8

Trong jquery một sự kiện ràng buộc của hadler là sự kiện tạo DOM phần tử (này trỏ đến phần tử dom). Trong nguyên mẫu để thay đổi ràng buộc của trình xử lý sự kiện, người dùng có thể sử dụng hàm bindAsEventListener; Làm cách nào để truy cập cả phần tử và phần tử DOM từ trình xử lý sự kiện?
Tương tự như How can I bind an event handler to an instance in JQuery?jquery "này" ràng buộc vấn đề về xử lý sự kiện (tương đương với bindAsEventListener trong nguyên mẫu)

function Car(){ 
    this.km = 0; 
    $("#sprint").click(this.drive); //setup event handler 
} 

// event handler 
// in it I need to access both the clicked element 
// and the binding object (instance of car) 
Car.prototype.drive = function(){ 
    this.km += 10; // i'd like to access the binding (but jq changes it) 
    this.css({ // also the element 
     left: this.km 
    }); 
    // NOTE that is inside this function I want to access them not elsewhere 
} 

var car = new Car(); 

Trả lời

0

Giá trị this nếu không sẽ trỏ đến (có nghĩa là, các yếu tố xử lý được gắn vào) cũng được thông qua trong currentTarget tài sản của đối tượng sự kiện. Vì vậy, nếu bạn sử dụng chức năng ràng buộc bạn nói về:

Car.prototype.drive = function(e) { 
    // this will be your car object 
    // e.currentTarget will be the element that you attached the click handler to 
} 
+0

Tôi không thể sử dụng 'bindAsEventListener' như nguyên mẫu. – clyfe

+0

@clyfe: Khá đơn giản để thực hiện một mình ... –

0

ok ở đây bạn là:

var car = {km:0}; 
$("#sprint").click(function(){ 
    car.km += 10; 
    $(this).css({ left: car.km }); 
}); 

tôi đã không kiểm tra nó nhưng phải thẳng về phía trước hoặc như đối với nơi bạn đã đi sai trên "cái này" của bạn đang xem xét phần tử "chạy nước rút" không phải là đối tượng "xe hơi".

+0

đây là những gì tôi đang cố gắng tránh :) – clyfe

+0

đủ công bằng :) Tôi đã tự hỏi tại sao đi theo chiều dài – Val

1

Chỉ cần liên kết biến số this và sử dụng.

function Car(){ 
    this.km = 0; 
    var that = this; 
    $("#sprint").click(function(){ 
     that.drive(this); 
    }); 
} 


Car.prototype.drive = function(element){ 
    this.km += 10; // i'd like to access the binding (but jq changes it) 
    this.css({ // also the element 
     left: this.km 
    }); 
    alert(element.innerHTML); 
    // NOTE that is inside this function I want to access them not elsewhere 
} 

Việc xử lý vượt qua yếu tố để các dụ

+0

bạn không đọc toàn bộ câu hỏi – clyfe

+0

I figured rằng sẽ giải quyết nó tự :) Nhưng tôi cập nhật câu trả lời với làm thế nào để truy cập cả hai ví dụ lớp và các yếu tố –

+0

câu hỏi khác cũng có loại câu trả lời nhưng tôi thấy nó khá xấu xí. đây có phải là cách được đề xuất để làm điều này trong cộng đồng jquery không? phải có cái gì đó tốt hơn ... hoặc chỉ là vấn đề sở thích cá nhân. tôi sẽ để cái này nướng thêm, và có thể chấp nhận câu trả lời của bạn. – clyfe

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