2011-11-15 36 views
6

Tôi đã tạo nút Giao diện người dùng jQuery và muốn thêm biểu tượng phụ 'X' vào sự kiện mouseenter và xóa 'X' trên sự kiện mouseleave. Nghe có vẻ dễ dàng.Khi di chuột thay đổi biểu tượng nút của jQuery UI - bị hỏng trên IE và Chrome

$("#hover").button({ 
icons: { 
    primary: "ui-icon-tag" 
} 
}).hover(function (event) { 
    // hover in   
    $(this).button("option", "icons", { primary: "ui-icon-tag", secondary: "ui-icon-close" }); 
}, function (event) { 
    // hover out 
    $(this).button("option", "icons", { primary: "ui-icon-tag" }); 
}); 

Sự kiện di chuột được kích hoạt nhiều lần nếu bạn di chuyển con trỏ chuột trong nút.

Tính năng này hoạt động trong Firefox, tuy nhiên, không thành công với IE và Chrome.

Thật khó để giải thích tác dụng kỳ quặc trong lời nói, nhưng xin vui lòng xem jsFiddle đây:

http://jsfiddle.net/27SSr/

Mục tiêu của tôi là để đạt được hiệu ứng nhất quán trên tất cả các trình duyệt. Cảm ơn =)

EDIT ***

Bây giờ tôi có một số đầu mối là tại sao di chuột được chia trong IE và Chrome. Di nút UI một vài lần và kiểm tra các yếu tố nút trong Firebug, Hóa ra các thẻ html đang thiếu sót bởi jQuery UI phụ tùng ..

<button id="hover" class="ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-button-text-icons" role="button"> 
<span class="ui-button-icon-primary ui-icon ui-icon-tag"/> 
<span class="ui-button-text">Hover me!</span> 
<span class="ui-button-icon-secondary ui-icon ui-icon-close"/> 
</button> 
<span class="ui-button-icon-primary ui-icon ui-icon-tag"/> 
<span class="ui-button-text">Hover me!</span> 
<span class="ui-button-icon-secondary ui-icon ui-icon-close"/> 
</button> 

Lưu ý kéo dài thêm và NÚT thẻ đóng bây giờ? Hành vi này có phải là lỗi của giao diện người dùng jQuery không?

Bạn có thể thử ví dụ ở đây:

http://jsfiddle.net/B5sAk/1/

Trả lời

3

Được rồi, sau khi loay hoay một lúc, cuối cùng là một cách giải quyết mà làm việc .. tại ít nhất điều đó có vẻ tốt với tôi.

$("button").button({ 
    icons: { 
     primary: "ui-icon-tag", 
     secondary: "ui-icon-blank" 
    } 
}).hover(function() { 
    // hover in    
    $(".ui-button-icon-secondary", this).toggleClass("ui-icon-close ui-icon-blank"); 
}, function() { 
    // hover out 
    $(".ui-button-icon-secondary", this).toggleClass("ui-icon-close ui-icon-blank"); 
}); 

Và thêm một dòng vào CSS:

.ui-icon-blank { background-position: -240px -224px; } /* point to blank area of sprite */ 

Xem ở đây cho một ví dụ làm việc: http://jsfiddle.net/GCme2/4/

0

thế nào về việc sử dụng mouseentermouseleave sự kiện, họ sẽ chỉ cháy một lần mỗi.

mẹo là để đóng gói nút trong phần tử có chứa và đính kèm các sự kiện chuột vào vùng chứa. đây là the working jsfiddle

và mã:

<span id="hover-container"> 
    <button id="hover">Hover me!</button> 
</span> 

$("#hover").button({ 
    icons: { 
     primary: "ui-icon-tag" 
    } 
}); 

$("#hover-container").mouseenter(function() { 
    $("#hover").button("option", "icons", { primary: "ui-icon-tag", secondary: "ui-icon-close" }); 
    prependMessage("entering #hover"); 
}); 

$("#hover-container").mouseleave(function() { 
     $("#hover").button("option", "icons", { primary: "ui-icon-tag" }); 
    prependMessage("leaving #hover"); 
}); 
+0

Điều đó sẽ không làm việc. Đã thử điều đó. Trong thực tế, dưới mui xe, di chuột là sử dụng mouseenter và mouseleave cho xử lý sự kiện là tốt, đọc ở đâu đó. Tôi có cảm giác rằng tình trạng chủng tộc đang diễn ra ở đây ..Nó xảy ra khi bạn di chuột qua nút đó và dẫn đến yếu tố thiếu sót đã chứng minh ở trên .. – Kagawa

+0

Tôi đang chiến đấu với jsfiddle, nhưng tôi nghĩ rằng câu trả lời cập nhật của tôi hoạt động ... – Jason

+0

Nó vẫn giống nhau, chỉ hoạt động trong Firefox, thất bại trên cả Chrome và IE .. Biểu tượng phụ ('X' - chữ thập) không bị xóa sau vài lần lướt nhanh .. Có thể bạn nên thử lại =) – Kagawa

1

Tại sao sử dụng javascript? Nó là một yêu cầu? Bạn có thể sử dụng css: hover psuedoclass?

.ui-button-text .myicon{background-image: url('/path/reg.jpg')} 
.ui-button-text .myicon:hover{background-image: url('/path/to.jpg')} 

Nếu bạn phải sử dụng jquery, sau đó tôi sẽ nói bạn cần làm e.stop() sau mỗi

...hover(function (event) { 
     // hover in   
     $(this).button("option", "icons", { primary: "ui-icon-tag", secondary: "ui-icon-close" }); 
     event.stop(); 
    }, function (event) { 
     // hover out 
     $(this).button("option", "icons", { primary: "ui-icon-tag" }); 
    event.stop(); 

}); 
+3

Tôi không sử dụng CSS giả ở đây vì nút đó một tiện ích giao diện người dùng jQuery. Nó cho phép thêm các biểu tượng chính và phụ vào nút bằng cách sử dụng các tùy chọn. Ngoài ra, không có những điều như event.stop(), tuy nhiên nếu bạn có nghĩa là event.stopPropagation() tôi đã thử điều đó và không làm việc quá – Kagawa

+0

+1 cho ý tưởng về CSS giả tạo mà tôi sẽ đi với toggleClass() workaround – Kagawa

+0

Vâng, tôi không thể nói với nhu cầu jqui của dự án của bạn, nhưng tôi chỉ xem jqui như một biểu định kiểu và một số js trợ giúp mà bạn có thể dễ dàng mở rộng với nhắm mục tiêu phần tử css tốt. –

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