2013-05-11 24 views
8

Khi làm $(...your selector here...).is(":hover"), jQuery trước 1.9.1 cho câu trả lời đúng, trong khi jQuery 1.9.1 nói với bạn điều này:.là (": hover") được chia như jQuery 1.9 Làm thế nào để sửa chữa

Error: Syntax error, unrecognized expression: unsupported pseudo: hover

Dưới đây là một cách giải quyết (trả lời không cần thiết.)

http://jsfiddle.net/mathheadinclouds/V342R/

trả lời ngắn gọn, kiểm tra xem

.parent().find(":hover") 

có độ dài 1 và chứa phần tử được đề cập.

NÀY KHÔNG GIỚI THIỆU thực hiện hành động trên di chuột - cho rằng, chỉ cần sử dụng .hover() này là về, AT một điểm tùy ý trong thời gian, tìm hiểu xem HAY KHÔNG MỘT SỐ YẾU TỐ IS được hovered

+2

bạn đang cố gắng để trả lời câu hỏi của riêng bạn? Nếu đúng như vậy, hãy viết câu trả lời. –

+1

Bạn đang làm mọi thứ phức tạp. Chỉ cần ['.hover()'] (http://api.jquery.com/hover/) sẽ làm: http://jsfiddle.net/BxL4w/5/ – Antony

+1

@Anthony: sai. Tôi muốn một boolean, là nó lơ lửng hay không. Tôi không muốn thực hiện một hành động trên di chuột. – mathheadinclouds

Trả lời

12

Giả công cụ chọn của bạn là #myid, sử dụng $('#myid:hover') thay vì sử dụng .is().

Nếu bạn đang sử dụng $(this) hoặc biến, hãy sử dụng myVar.filter(':hover').

+0

bạn nói đúng, điều đó đơn giản hơn. Tôi cũng đặt nó vào f2 – mathheadinclouds

+5

làm thế nào về khi sử dụng '$ (this)' hoặc một đối tượng biến? –

+0

sau đó, sử dụng var temp = $ (yourElement) .parent(). Find (": hover"); trả về temp.length == 1 && temp [0] == yourElement; – mathheadinclouds

0

Tuy nhiên giải pháp thay thế ở trên không phù hợp khi bạn so sánh các phần tử bằng cách sử dụng jQuery.fn.is() với bộ chọn được sáng tác chưa được biết trước và có thể khớp với một số phần tử trong vùng chứa chính.

ví dụ, cùng một ngoại lệ được ném khi selectorText trong style_get() dưới đây là tương đương với: ".mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar, .mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer: hover .mCSB_dragger .mCSB_dragger_bar"

..because di chuột không được định nghĩa trong Sizzle.selectors.pseudos hoặc Sizzle.selectors.setFilters (jquery-2.1.4, dòng 1764) ..

function style_get(elem) { 

    var sheets=document.styleSheets; 
    var css_properties={}; 
    elem=$(elem); 

    for (var s in sheets) { 
    var rules=sheets[s].rules || sheets[s].cssRules; 

    for (var r in rules) { 
     if (elem.is(rules[r].selectorText)) { 

     css_properties=$.extend(
      css_properties, 
      css.parse(rules[r].style), 
      css.parse(elem.attr('style')) 
     ); 

     } 
    } 

    } 

    return css_properties; 

} 
+0

"Cách giải quyết" nào mà bạn đề cập đến là "không phù hợp"? Bạn có nhận xét về bài đăng khác không? Nếu vậy, bạn nên đăng bình luận trên bài đăng đó. Câu trả lời của bạn có vẻ không đầy đủ. – Kmeixner

+0

@Kmeixner, OP đã viết "Đây là một giải pháp ..." nó có thể là câu trả lời cho những gì bạn đang yêu cầu. Tôi dễ dàng tìm thấy nó bằng cách sử dụng ctrl + f và gõ "workaround" – Zectbumo

0

Cố gắng đưa ra chức năng ẩn danh vào .filter()

Tôi nghĩ rằng, giải pháp của tôi sẽ giúp bạn:

// 
// jQuery 3 pseudo ':hover' doesn't support 
// 

// Working on jQuery 1.7.1 
$("*").on('click', $.proxy(function() { 
    if (this.$('.tooltip:hover').length > 0) { // jQuery 3.2.1 -> Uncaught Error: Syntax error, unrecognized expression: unsupported pseudo: hover 
     console.log('Hovered!'); 
    } else { 
     console.log('Where is my element!?'); 
    } 
}, this)); 


// Updated solution for jQuery 1.7.1 - 3.2.1 
$("*").on('click', $.proxy(function() { 
    var isHovered = $('.tooltip').filter(function() { 
     return $(this).is(":hover"); 
    }); 

    if (isHovered.length > 0) { 
     console.log('Hovered!'); 
    } else { 
     console.log('Where is my element!?'); 
    } 
}, this)); 

cũng có, bạn có thể thấy ý chính GitHub của tôi: https://gist.github.com/antydemant/74b00e27790e65f4555a29b73eea7bb2

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