2012-02-05 40 views
58

Tôi có hộp tìm kiếm trên trang web của mình. Hiện tại, người dùng phải nhấp vào nút gửi bên cạnh hộp để tìm kiếm qua bài đăng của jquery. Tôi muốn cho phép người dùng cũng nhấn enter để tìm kiếm. Tôi có thể làm cái này như thế nào?Kích hoạt sự kiện trên `click` và` enter`

jQuery:

$('document').ready(function(){ 
    $('#searchButton').click(function(){ 
     var search = $('#usersSearch').val(); 
     $.post('../searchusers.php',{search: search},function(response){ 
      $('#userSearchResultsTable').html(response); 
     }); 
    }); 
}); 

HTML:

<input type='text' id='usersSearch' /><input type='button' id='searchButton' value='search' /> 
+2

Xem tại đây: http://stackoverflow.com/questions/699065/submitting-a-form-on-enter-with-jquery – mowwwalker

+0

Yup, chức năng tìm kiếm rất hữu ích ... – elclanrs

Trả lời

87

Sử dụng sự kiện keypress trên usersSearch textbox và tìm kiếm Nhập nút. Nếu nhấn nút enter, hãy kích hoạt sự kiện nhấn nút tìm kiếm sẽ thực hiện phần còn lại của công việc. Thử cái này.

$('document').ready(function(){ 
    $('#searchButton').click(function(){ 
     var search = $('#usersSearch').val(); 
     $.post('../searchusers.php',{search: search},function(response){ 
      $('#userSearchResultsTable').html(response); 
     }); 
    }) 
    $('#usersSearch').keypress(function(e){ 
     if(e.which == 13){//Enter key pressed 
      $('#searchButton').click();//Trigger search button click event 
     } 
    }); 

}); 

Demo

+1

Tốt hơn: sử dụng sự kiện thay thế để đảm bảo chức năng của bạn chỉ được kích hoạt một lần. Nhờ @StevePaulo cho bình luận của mình trong [câu trả lời này] (http://stackoverflow.com/a/155263/461544). – steps

+1

Nhược điểm của việc sử dụng khóa mà tôi vừa phát hiện: Bạn sẽ không thể ngăn chặn hành động mặc định, vì sự kiện keyup chỉ được kích hoạt _after_ hành động mặc định cho khóa đã được thực thi (xem [here] (http: // www.quirksmode.org/dom/events/keys.html)). – steps

5

Something như thế này sẽ làm việc

$('#usersSearch').keypress(function(ev){ 
    if (ev.which === 13) 
     $('#searchButton').click(); 
}); 
+0

nhưng làm cách nào tôi có thể sử dụng cả hai, nhấn tìm kiếm hoặc nhấn enter? – kirby

+1

Bạn đặt mã tôi đã thêm vào ngoài mã bạn đã có. Sau đó cả hai sẽ làm việc. – jopke

2
$('#form').keydown(function(e){ 
    if (e.keyCode === 13) { // If Enter key pressed 
     $(this).trigger('submit'); 
    } 
}); 
+0

Điều này làm việc cho tôi :) –

0

Hãy nhìn vào các keypressfunction.

Tôi tin rằng chìa khóa enter13 do đó bạn sẽ muốn một cái gì đó như:

$('#searchButton').keypress(function(e){ 
    if(e.which == 13){ //Enter is key 13 
     //Do something 
    } 
}); 
1
$('#usersSearch').keyup(function() { // handle keyup event on search input field 

    var key = e.which || e.keyCode; // store browser agnostic keycode 

    if(key == 13) 
     $(this).closest('form').submit(); // submit parent form 
} 
40

Bạn gọi cả hai nghe sự kiện sử dụng .on() sau đó sử dụng một if bên trong hàm:

$(function(){ 
    $('#searchButton').on('keypress click', function(e){ 
    var search = $('#usersSearch').val(); 
    if (e.which === 13 || e.type === 'click') { 
     $.post('../searchusers.php', {search: search}, function (response) { 
     $('#userSearchResultsTable').html(response); 
     }); 
    } 
    }); 
}); 
+8

Tại sao câu trả lời này không nhận được nhiều phiếu bầu hơn? Ý tôi là đây là các khối mã nhỏ hơn (như không thêm một sự kiện khác để kích hoạt một lần nhấp). Bất kỳ nhược điểm nào của điều này? –

+4

Câu trả lời này tốt hơn một câu được chấp nhận – sagarthapa

+0

Quả thật, Nin-ya & sagarthapa. –

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