2011-01-05 19 views
42

Tôi đang cố gắng tạo phím tắt trên trang web mà tôi đang tạo. Tôi biết tôi có thể làm điều đó theo cách này:jquery: nhấn phím, ctrl + c (hoặc một số combo như thế)

if(e.which == 17) isCtrl=true; 
if(e.which == 83 && isCtrl == true) { 
    alert('CTRL+S COMBO WAS PRESSED!') 
    //run code for CTRL+S -- ie, save! 
    e.preventDefault(); 
} 

Nhưng ví dụ dưới đây là dễ dàng hơn và ít mã, nhưng nó không phải là một sự kiện kết hợp nhấn phím:

$(document).keypress("c",function() { 
    alert("Just C was pressed.."); 
}); 

Vì vậy, tôi muốn biết nếu bằng cách sử dụng thứ hai này ví dụ: tôi có thể làm điều gì đó như:

$(document).keypress("ctrl+c",function() { 
    alert("Ctrl+C was pressed!!"); 
}); 

là điều này có thể? Tôi đã thử nó và nó không hoạt động, tôi đang làm gì sai.

Trả lời

69

cách tiếp cận khác (không Plugin cần thiết) nó để chỉ cần sử dụng .ctrlKey tài sản của event object mà được thông qua trong Nó chỉ ra nếu Ctrl được ép vào thời điểm sự kiện này, như thế này:.

$(document).keypress("c",function(e) { 
    if(e.ctrlKey) 
    alert("Ctrl+C was pressed!!"); 
}); 
+0

nhưng không có gì giống như: '.keypress (" c + s ",' ở đâu khi tôi giữ c và s nó sẽ làm điều gì đó? Và trong mã của bạn tôi phải bấm chúng cùng một lúc, tôi cần phải giữ 1 phím và nhấn phím khác, tôi thực sự chỉ cần tạo một menu sẽ bật lên khi tôi nhấn tổ hợp phím nào đó, vì vậy có thể giữ phím s và nhấp chuột trái hoặc bất kỳ thứ gì, như thế, không chắc chắn combo nào tôi ' –

+4

@ android.nick - không được tích hợp với lõi jQuery, không, bạn sẽ cần một plugin cho * that *, nhưng đối với các phím ctrl, alt và shift, bạn chỉ có thể sử dụng '.ctrlKey', Các thuộc tính '.altKey' và' .shiftKey' –

+0

@nick mã này không hoạt động trong IE8 – ravi404

5

Thay vào đó, hãy thử plugin Jquery Hotkeys - plugin sẽ thực hiện mọi thứ bạn yêu cầu.

jQuery Hotkeys là một plug-in cho phép bạn dễ dàng thêm và loại bỏ xử lý cho sự kiện bàn phím bất cứ nơi nào trong mã của bạn hỗ trợ hầu hết các tổ hợp phím.

Plugin này được dựa tắt của các plugin bởi Tzury Bar Yochay: jQuery.hotkeys

Cú pháp như sau:

$(expression).bind(types, keys, handler); $(expression).unbind(types, handler); 

$(document).bind('keydown', 'ctrl+a', fn); 

// e.g. replace '$' sign with 'EUR' 
// $('input.foo').bind('keyup', '$', function(){ 
//  this.value = this.value.replace('$', 'EUR'); }); 
+2

+1 Đó không phải là thực hành tốt để ràng buộc Ctrl + C mặc dù, hoặc bất kỳ tổ hợp phím nóng được xác định trước nào khác. Xử lý cẩn thận. –

+0

@Pekka điểm tốt – Andy

+0

đã đồng ý, đó chỉ là một ví dụ, tôi thực sự đang cố gắng tìm ra tổ hợp phím tốt nhất cho một menu sẽ bật lên bởi con trỏ chuột. –

1

Có một plugin cho jQuery gọi là "Hotkeys" cho phép bạn liên kết với các tổ hợp phím.

Điều này có làm được gì không?

Jquery HotKeys - Google Code

+0

một plugin là loại overkill cho sự đơn giản của những gì tôi cần, đặc biệt là ở 4.4kb, nó chỉ là quá nhiều, cảm ơn bạn mặc dù. –

1
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script type='text/javascript'> 
    var ctrlMode = false; // if true the ctrl key is down 
    ///this works 
    $(document).keydown(function(e){ 
    if(e.ctrlKey){ 
     ctrlMode = true; 
    }; 
    }); 
    $(document).keyup(function(e){ 
    ctrlMode = false; 
    }); 
</script> 
+1

Bạn có cân nhắc thêm một số câu chuyện để giải thích tại sao mã này hoạt động không, và điều gì làm cho nó trở thành câu trả lời cho câu hỏi? –

+0

Từ thử nghiệm của tôi vừa rồi - có vẻ như IE8 không chuyển keypressed cho * một số * phím đặc biệt (Ctrl-C - no, Ctrl X và V - yes). Trong khi keydown * là * được thông qua, do đó, câu trả lời này hoạt động. –

3

Bạn không thể sử dụng tổ hợp phím Ctrl + C bởi j Truy vấn, nhưng bạn có thể với một thư viện mà là shortcut.js

Live Demo: Abdennour JSFiddle

$(document).ready(function() { 
shortcut.add("Ctrl+C", function() { 
    $('span').html("أحسنت. لقد ضغطت على حرفي : Ctrl+C"); 
     }); 
    shortcut.add("Ctrl+V", function() { 
    $('span').html("أحسنت. لقد ضغطت على حرفي : Ctrl+V"); 
     }); 
     shortcut.add("Ctrl+X", function() { 
    $('span').html("أحسنت. لقد ضغطت على حرفي : Ctrl+X"); 
     }); 


}); 
29

Tôi là một chút muộn để dự buổi tiệc nhưng đây là một phần của tôi

$(document).on('keydown', function (e) { 
    // You may replace `c` with whatever key you want 
    if ((e.metaKey || e.ctrlKey) && (String.fromCharCode(e.which).toLowerCase() === 'c')) { 
     console.log("You pressed CTRL + C"); 
    } 
}); 
+6

Điều này làm việc cho tôi bằng cách sử dụng jQuery 1.11.2. Câu trả lời được chấp nhận thì không. – sarme

+2

Đồng ý phương pháp này hoạt động tốt hơn với phiên bản mới hơn của jQuery – asherrard

+2

Mac là e.metaKey của Mac nên '(e.metaKey || e.ctrlKey) && ...' làm việc cho tôi – kevnk

0

Trong trường hợp của tôi, tôi đang tìm kiếm một phím ctrl keydown và bấm vào sự kiện. jquery của tôi trông như thế này:

$('.linkAccess').click(function (event) { 
    if(true === event.ctrlKey) { 

    /* Extract the value */ 
    var $link = $('.linkAccess'); 
    var value = $link.val(); 

    /* Verified if the link is not null */ 
    if('' !== value){ 
     window.open(value); 
    } 
    } 
}); 

đâu "linkAccess" là tên lớp đối với một số lĩnh vực cụ thể, nơi tôi có một liên kết và tôi muốn truy cập nó bằng cách sử kết hợp của tôi chìa khóa và nhấn chuột.

0

tôi không thể có được nó để làm việc với .keypress(), nhưng nó làm việc với .keydown() chức năng như thế này:

$(document).keydown(function(e) { 
    if(e.key == "c" && e.ctrlKey) { 
     console.log('ctrl+c was pressed'); 
    } 
}); 
Các vấn đề liên quan