2009-08-06 2 views
7

Tôi có nhu cầu kích hoạt mở trình duyệt (IE, Firefox, Safari, v.v.) menu ngữ cảnh thông qua javascript. Vấn đề tôi đang cố gắng giải quyết, là khi một phần tử phủ lên được nhấp chuột phải, phần tử bên dưới nó hiển thị trình đơn ngữ cảnh của nó. Vì vậy, nếu phần tử trên cùng là một nhãn, khi bạn nhấp chuột phải, tôi cần hiển thị menu ngữ cảnh cho phần tử đầu vào bên dưới.Làm cách nào để kích hoạt trình đơn ngữ cảnh của trình duyệt trên một phần tử. (Nếu người dùng nhấp chuột phải)

Tôi biết cách giữ menu ngữ cảnh của nhãn hiển thị, nhưng tôi không biết cách mở menu ngữ cảnh tùy ý.

Mọi trợ giúp đều được đánh giá cao!

+0

Nếu tôi ở vị trí của bạn, tôi sẽ không cố gắng hack nó theo cách này. Tôi có thể muốn hiểu tại sao menu ngữ cảnh của hộp nhập liệu hiển thị thay vì nhãn. Bạn có thể cung cấp chi tiết hơn? –

+0

Xin lỗi, chỉ cần xóa nó sau khi đọc câu hỏi. –

+0

Bạn có thể xem plugin của tôi tại đây: http: // fuelyourcoding.com/scripts/infield/và cố gắng nhấp chuột phải vào "nội dung" của trường văn bản. Nếu tôi không thể kích hoạt menu ngữ cảnh của trình duyệt, nó làm cho việc sử dụng plugin này bị hạn chế một chút. –

Trả lời

13

Xin lỗi là người mang tin tức đáng tiếc, nhưng điều này là không thể làm với Javascript.

+0

Tôi đã hy vọng đây không phải là câu trả lời. Sẽ để nó mở lâu hơn một chút .... chỉ trong trường hợp. :) –

+0

Có, tôi sẽ để nó mở nếu tôi là bạn. –

2

Tôi không muốn làm hỏng bạn, hoàn toàn ngược lại, đặc biệt là bởi vì bạn đã trả lời câu hỏi của riêng tôi :)

Tôi không nghĩ rằng dùng menu ngữ cảnh của trình duyệt có thể truy cập thông qua một kịch bản thông thường trên một trang web .

Nếu những gì bạn đang yêu cầu thực sự có thể thực hiện được thì các nhà sản xuất trình duyệt có thể coi đây là lỗi và xóa hành vi này. Cross-trình duyệt, hành vi này là rất khó có thể có sẵn ngày hôm nay.

Tại sao bạn không nắm bắt các sự kiện chuột và bất cứ khi nào chuột trực tiếp trong vùng của phần tử bên dưới mà bạn muốn hiển thị menu ngữ cảnh, hãy đẩy phần tử bao phủ bên dưới, ngược lại trên đầu?

Đó là một khả năng mà tôi có thể nghĩ đến, về cơ bản tiết lộ/phơi bày phần tử ẩn phụ thuộc vào vị trí của chuột. Giống như cắt một lỗ vào lớp phủ.

Hoặc tại sao bạn không làm cho trường văn bản trong suốt và đặt lớp phủ bên dưới trường văn bản hoàn toàn?

Nếu điều này không diễn ra về mặt kỹ thuật, thì ít nhất bạn có điểm trong việc gửi lỗi hoặc cải tiến đối với các trình duyệt được nhắm mục tiêu.

BTW có vẻ như menu ngữ cảnh thực sự hoạt động nếu người dùng nhấp chuột phải trực tiếp vào vị trí của dấu mũ, vì vậy đây có thể là lỗ hổng khác để bạn xem xét.

+0

Tất cả những suy nghĩ rất tốt. Tôi nghĩ về bản phát hành mới, tôi sẽ thêm hỗ trợ để hiển thị nhãn * bên dưới * phần tử đầu vào vì điều này sẽ giải quyết vấn đề. Nó chỉ có nghĩa là phần tử bao gói cần cung cấp màu nền cho phần tử đầu vào hoặc vùng văn bản. Nên làm việc mặc dù! –

0

Tôi có giải pháp có thể phù hợp với nhu cầu của bạn. Nó chưa hoàn hảo, tôi chỉ thực hiện một vài thử nghiệm nhanh trong một vài trình duyệt (Fox 3.6, IE7, IE8, Chrome 4, Safari 3 trên xp) Nó sẽ cần phải được tinh chỉnh và cải tiến nhưng đó là một sự khởi đầu. Về cơ bản, ý tưởng là xóa nhãn khi nhấp chuột phải vào mousedown để trường mong muốn được nhấn bởi sự kiện mouseup và do đó kích hoạt trình đơn ngữ cảnh trên trường có liên quan.

// Remove the contextmenu from "In-Field" Labels 
base.$label.bind("contextmenu",function(e){ 
    return false; 
}); 

// Detect right click on "In-Field" label: 
// hide label on mousedown so mouseup will target the field underneath. 
base.$label.mousedown(function(e){   
    if (e.which == 3){ 
     var elLbl = $(this); 
     elLbl.hide(); 
     var elFid = $(this).attr("for"); 
     // bind blur event to replace the label when we are done. 
     $("#" + elFid).bind("blur.infieldlabel",function(){      
      elLbl.show(); 
      $("#" + elFid).unbind("blur.infieldlabel");      
     });    
     return false; 
    } 
}); 

Trình duyệt IE và Safari gặp phải sự cố lạ khi bạn cần nhấp vào và mở hai lần trước khi nhãn sẽ hiển thị lại (điều gì đó liên quan đến thời gian sự kiện). Bạn có thể dễ dàng thấy lý do tại sao điều này xảy ra bằng cách xem mã. Cũng chú ý đôi khi một chút trục trặc trong con cáo sau khi dán vào cánh đồng, làm mờ nhãn xuất hiện trong một giây khi không nên. Điều này sẽ là một điều khá đơn giản để khắc phục nếu bạn quyết định kết hợp phương thức này vào mã của bạn.