2008-10-07 90 views
16

Có ai biết về crossbrowser tương đương với tham số sự kiện clearOriginalTarget không? Tham số này là Mozilla cụ thể và nó mang lại cho tôi nguyên tố gây ra mờ. Hãy nói rằng tôi có một đầu vào văn bản và một liên kết trên trang của tôi. Nhập văn bản có tiêu điểm. Nếu tôi nhấp vào liên kết, sự kiện làm mờ đầu vào của văn bản sẽ cho tôi phần tử liên kết trong Firefox thông qua tham số clearOriginalTarget.Crossbrowser tương đương với tham số sự kiện clearOriginalTarget

Tôi đang mở rộng phương thức onBlur của Autocompleter.Base để không ẩn kết quả tìm kiếm khi trường tìm kiếm mất tiêu điểm cho các phần tử đã cho. Theo mặc định, phương thức onBlur sẽ ẩn nếu trường tìm kiếm mất tiêu điểm đối với bất kỳ phần tử nào.

Autocompleter.Base.prototype.onBlur = Autocompleter.Base.prototype.onBlur.wrap(
function(origfunc, ev) { 
    var newTargetElement = (ev.explicitOriginalTarget.nodeType == 3 ? ev.explicitOriginalTarget.parentNode: ev.explicitOriginalTarget); // FIX: This works only in firefox because of event's explicitOriginalTarget property 
    var callOriginalFunction = true; 
    for (i = 0; i < obj.options.validEventElements.length; i++) { 
     if ($(obj.options.validEventElements[i])) { 
      if (newTargetElement.descendantOf($(obj.options.validEventElements[i])) == true || newTargetElement == $(obj.options.validEventElements[i])) { 
       callOriginalFunction = false; 
       break; 
      } 
     } 
    } 
    if (callOriginalFunction) { 
     return origFunc(ev); 
    } 
} 
); 


new Ajax.Autocompleter("search-field", "search-results", 'getresults.php', { validEventElements: ['search-field','result-count'] }); 

Cảm ơn.

Trả lời

9

Không có tương đương với explicitOriginalTarget trong bất kỳ trình duyệt nào khác ngoài trình duyệt dựa trên Gecko. Trong Gecko, đây là một thuộc tính nội bộ và nó không được sử dụng bởi một nhà phát triển ứng dụng (có thể bởi các nhà văn liên kết XBL).

+0

Cảm ơn Sergey. Có lẽ tôi nên bắt đầu viết phương pháp của riêng tôi bằng cách sử dụng sự kiện đoàn thay vì cố gắng để mở rộng onBlur phương pháp của Autocompleter. Với sự kiện ủy nhiệm và sử dụng một số biến toàn cục, tôi có thể sửa lỗi này. – matte

1

Hình như nó là thiết kế nhiều hơn cho các tác giả mở rộng hơn cho thiết kế Web ...

tôi sẽ xem các sự kiện mờ/tập trung vào cả hai mục tiêu (hoặc mục tiêu tiềm năng) và chia sẻ thông tin của họ.
Việc triển khai chính xác có thể phụ thuộc vào mục đích thực sự.

+0

Tôi cũng nghĩ xem các sự kiện mờ/tiêu điểm trên cả hai mục tiêu nhưng nếu Firefox có tham số cụ thể (explicitOriginalTarget) cho điều đó, có thể các trình duyệt khác cũng vậy. Có lẽ không phải là một thông số mà là một hack. – matte

3

Tương đương thô với Mozilla .explicitOriginalTarget trong IE là document.activeElement. Tôi nói thô tương đương bởi vì nó đôi khi sẽ trở lại một mức độ hơi khác nhau trong cây nút DOM tùy thuộc vào hoàn cảnh của bạn, nhưng nó vẫn là một công cụ hữu ích. Rất tiếc, tôi vẫn đang tìm kiếm tương đương với Google Chrome.

0

Đối với IE, bạn có thể sử dụng srcElement và ép buộc.

if(!selectTag.explicitOriginalTarget) 
    selectTag.explicitOriginalTarget = selectTag.srcElement; 
3

IE srcElement không chứa các yếu tố tương tự như FF explicitOriginalTarget. Thật dễ dàng để thấy điều này: nếu bạn có trường nút có hành động onClick và trường văn bản với hành động onChange, hãy thay đổi trường văn bản và di chuyển con trỏ trực tiếp đến nút và nhấp vào đó. Tại thời điểm đó, IE srcElement sẽ là trường văn bản, nhưng explicitOriginalTarget sẽ là trường nút. Đối với IE, bạn có thể nhận tọa độ x, y của nhấp chuột từ các thuộc tính event.xevent.y.

Thật không may, trình duyệt Chrome không cung cấp số tọa độ explicitOriginalTarget cũng như chuột cho nhấp chuột. Bạn được để thiết bị của riêng mình để tìm ra nơi sự kiện onChange đã bị sa thải. Để thực hiện việc này, sử dụng khôn ngoan các sự kiện mousemovemouseout có thể cung cấp theo dõi chuột, sau đó có thể kiểm tra trong trình xử lý onChange.

3

Cập nhật năm 2015 ... bạn có thể sử dụng event.relatedTarget trên Chrome. Một điều cơ bản, hy vọng các trình duyệt khác sẽ theo dõi ...

+1

Thật không may, có vẻ như Firefox không có hoặc tiết lộ .explicitOriginalTarget nữa, cũng như họ chưa triển khai .relatedTarget chưa, kể từ tháng 7 năm 2015. https://bugzilla.mozilla.org/show_bug.cgi?id = 962251 –

+0

@JudahHimango Firefox 55 vẫn hỗ trợ 'explicitOriginalTarget'. Về 'relatedTarget', nó không giống nhau chút nào. – icl7126