2011-11-06 33 views
8

Tôi có thể làm như thế nào?Sự kiện match.target với đối tượng jQuery hiện có

event.target trả về đối tượng HTML,

và phần tử của tôi là đối tượng jQuery.

Có cách nào tốt hơn để tìm hiểu xem event.target = my_jquery_object, ngoài việc so sánh ID hoặc lớp học?

Tôi muốn chắc chắn rằng đó là cùng một đối tượng, không chỉ là một phần tử với một lớp học tương tự ...

Tôi đã thử với $(event.target) !== the_element và nó không

the_element được xác định vào đầu như $('.something', $(this))


Điều tôi đang cố gắng làm là đóng hộp khi người dùng nhấp vào bên ngoài, nhưng với điều kiện nhấp chuột không được thực hiện trên liên kết đã mở hộp ở địa điểm đầu tiên.

Vì vậy, tôi có điều này:

$(document).click(function(event){ 
    if(($(event.target).parents().index(box) == -1) 
    && box.is(':visible')){ 
     close(); 
    } 

}); 

Và tôi muốn thêm một điều kiện xác nhận rằng các nhấp chuột không được thực hiện trên trang liên kết mở hộp.

này hoạt động, nhưng tôi không thích nó:

if($(event.target).attr('id') != the_element)

:)

Trả lời

9

Bạn có thể lấy phần tử DOM thực tế từ jQuery bằng cách sử dụng .get(0) hoặc chỉ đơn giản là the_element[0]. Nó có lẽ là tốt hơn để kiểm tra với jQuery, mặc dù.

if (the_element.is(event.target)) 
{ 
    ... 
} 

Sử dụng ví dụ của bạn:

$(document).click(function(event){ 
    if (the_element.is(event.target)) { 
     return false; 
    } 
    if(($(event.target).parents().index(box) == -1) 
    && box.is(':visible')){ 
     close(); 
    } 

}); 
5

Thử -

if(event.target === the_element[0]) 

the_element[0] nên unwrap đối tượng jQuery của bạn và trả về một 'bình thường 'Đối tượng DOM, sau đó bạn có thể so sánh nó với đối tượng DOM được trả về bởi event.target.

-2

lẽ tôi là sai, nhưng có vẻ như không ai hiểu được câu hỏi ... Tôi cũng muốn biết làm thế nào để GET jQuery OBJECT mà tôi đã sử dụng chức năng nghe từ EVENT.TARGET, nhưng không phải là nút DOM cho đối tượng jquery !!)) Vì vậy, ...Tôi thấy không phải là một rất tiện dụng, nhưng giải pháp làm việc:

var elem = $('<input type="text" class="input" />'); 
elem.focus($.proxy(function(e) 
{ 
    this.onInpFocus(e, elem); 
}, this)); 

Và sửa đổi phương thức callback của người nghe để nhận 2 đối số:

onInpFocus : function(e, inp) 

Thay vì sử dụng cách đơn giản như:

elem.focus($.proxy(this.onInpFocus, this)); 
-2

Trên thực tế, tôi tìm thấy một cách khác, tiện dụng hơn nhiều :) Chỉ cần sử dụng số liệu dữ liệu:

Dữ liệu được chuyển tới trình xử lý trong event.data khi sự kiện là được kích hoạt.

Bây giờ mã của tôi trông như thế này:

var inp = $('<input type="text" />'); 
inp.focus({ j : inp } , $.proxy(this.onInpFocus, this)); 

//and the handler method 
onInpFocus : function(e) 
{ 
var inp = e.data.j; 
... 
} 
Các vấn đề liên quan