2009-03-25 28 views
9

Tôi đang cố gắng tập trung vào cửa sổ bằng cách sử dụng jquery. Cửa sổ được bật lên thông qua một nút bấm trên trang mẹ. Tôi có một số cuộc gọi ajax đang diễn ra trong cửa sổ con, vì vậy dữ liệu đang được cập nhật. Vấn đề của tôi là nếu người dùng nhấp vào cửa sổ cha và ẩn con đằng sau nó, tôi muốn mang lại cửa sổ con đó trở lại vị trí hàng đầu nếu có bản cập nhật dữ liệu.Làm thế nào để tập trung vào một cửa sổ trong jquery?

bên $ (document) .ready tôi dây lên những sự kiện này:

$(window).blur(function(){ 
    WindowHasFocus =false; 
}).focus(function(){ 
    WindowHasFocus =true; 
}); 

Sau đó, nếu dữ liệu được cập nhật, tôi gọi chức năng này:

function FocusInput(){ 

if(!WindowHasFocus){ 
    $(window).focus(); 
} 
} 

này hoạt động như mong đợi trong IE8, nhưng trong FireFox (và tất cả các trình duyệt khác) sự kiện Blur dường như không bao giờ xảy ra nếu tôi nhấp vào cửa sổ chính. Bất kỳ đề xuất/ý tưởng về cách đạt được điều này?

update:

Tổng số thời điểm facepalm: Trong FireFox: * Công cụ * Options ... * Nội dung tab * Nâng cao nút bên cạnh “Enable JavaScript” * đánh dấu vào ô có tên là "Nâng cao hoặc thấp hơn của Windows "

+0

Đặt câu trả lời của bạn trong một câu trả lời riêng biệt để chúng tôi có thể upvote và đưa câu hỏi ra khỏi danh sách chưa được trả lời. –

Trả lời

2

Tổng số thời điểm facepalm: Trong FireFox:

  • cụ
  • Options ...
  • Content tab
  • nâng cao nút bên cạnh “Enable JavaScript”
  • kiểm tra hộp có tên là "Nâng cao hoặc Hạ Windows "

Điều này bị tắt bởi de lỗi và phải được kích hoạt. Và ngoài ra, tôi cho rằng vì nó không hoạt động trong Chrome, Safari sẽ giống nhau, nhưng bạn biết họ nói gì về "giả sử" (nó hoạt động trong Safari, chứ không phải Chrome).

1

Có vẻ như bạn không nên quan tâm khi biết thời điểm cửa sổ của bạn bị mờ. Khi dữ liệu của bạn cập nhật, cửa sổ của bạn không tập trung, trong trường hợp bạn muốn lấy tiêu điểm, hoặc nó đã được lấy nét, và lấy nét lại nó sẽ không làm bạn đau.

+0

tốt, lý do là cửa sổ con có một đầu vào văn bản, và tôi không muốn tập trung được lấy đi từ đó. Nhưng trong mọi trường hợp, $ (cửa sổ) .focus() dường như không làm bất cứ điều gì trong FF. –

+1

Bạn đã thử thực hiện 'window.focus()' mà không có cuộc gọi jquery? – levik

2

Nếu không có lý do chính đáng để có hai cửa sổ riêng biệt thì tốt hơn nên sử dụng "hộp phương thức", có rất nhiều ví dụ và plugin jquery để đạt được điều đó. Ví dụ về plugin như vậy: http://www.84bytes.com/2008/06/02/jquery-modal-dialog-boxes/

+0

không thể sử dụng phương thức, nó phải là một cửa sổ riêng biệt. –

+1

Trong trường hợp đó, hãy thử gọi trọng tâm từ cửa sổ chính: url = 'someUrl' newWin = window.open (url, "helpWin", "features"); ... newWin.window.focus() – Miquel

+0

Một lý do chính đáng là bảo mật: cửa sổ chính có thể là 'http' thông thường và cần mở cửa sổ là' https'. – JohnK

1

Bạn hoàn toàn chính xác. Trong FF, có vẻ như nó không kích hoạt sự kiện, nhưng cùng lúc đó, có vẻ như nó không đăng ký phần tử như đang được tập trung. Do đó, sự kiện mờ không bao giờ có thể bị sa thải. Không chắc tôi thậm chí còn giải thích chính xác ... Đoạn mã sau nói lên tất cả.

Trong ví dụ này, hộp được ẩn theo mặc định, nhưng được hiển thị qua trình nghe sự kiện lấy nét. Trong trình duyệt IE 8, nếu bạn nhấp vào cửa sổ chính, nó vẫn bắn mờ, nhưng trong FF nó không:

<html> 
<head> 

</head> 
<body> 
    <div id="hiddenWin" style="width: 100px; height: 100px; background-color: Black; display: none;"></div> 

    <script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script> 
    <script type="text/javascript"> 
     var something = 12; 
     something += 4; 

     $(document).ready(function()   
      { 

       $("#hiddenWin").focus(function() 
        { 
         $(this).show(); 
        } 
       ).blur(function() 
        { 
         $(this).hide(); 
        }    
       )    

       $("#hiddenWin").focus(); 
      } 
     ); 
    </script> 

</body> 
</html> 

Đối với nhu cầu của bạn, nó sẽ là khả thi để thiết lập một nền che phủ? Cái gì đó là một vị trí cố định @ top: 0 và left: 0 chiếm toàn bộ màn hình và có một z-index nhỏ hơn popup của bạn. Bằng cách đó, khi họ nhấp vào lớp phủ, nó sẽ ăn cắp tập trung và sau đó bạn có thể ẩn mọi thứ ...? IDK, chỉ là một gợi ý. Tôi sẽ tiếp tục làm rối tung xung quanh và xem liệu tôi có thể hình dung ra được không. Câu hỏi hay.1

+0

không, ý tưởng là để cho phép người duyệt trang web và chỉ mang cửa sổ con lên phía trước khi đã có bản cập nhật dữ liệu. –

+0

tìm thấy nó ... im một thằng ngốc: Trong FireFox: * Công cụ * Options ... * Nội dung tab * Nâng cao nút bên cạnh “Enable JavaScript” * đánh dấu vào ô có tên là "Nâng cao hoặc thấp hơn Windows" –

0

Vâng, phương thức có lẽ là cách để đi nhưng đôi khi bạn chỉ cần thực hiện theo cách bạn muốn thực hiện.

Tôi sẽ sử dụng JavaScript cũ thuần túy. Đặt tên cho cửa sổ và đưa nó vào tiêu điểm.

function showImageWindow(imageURL) 
    { 
     var imageWindow = window.open(imageURL,"My_Window","width=1000px,height=1000px,menubar=0,titlebar=0,toolbar=0,location=0,scrollbars=0,status=0"); 
     imageWindow.focus(); 
    } 
Các vấn đề liên quan