我们有一个网络应用程序,允许用户扫描条形码或点击隐藏条形码输入的链接,并显示JQuery选择的选择菜单。
为了节省用户必须在产品搜索选择菜单和条形码输入之间手动切换,我正在检查条形码输入字段中的空格键,然后切换输入并使用用户搜索条件预填充所选择的选择菜单。它工作正常,但我发现条形码输入因检查空格键而导致滞后。
我是Javascript的新手,这是我的第一次尝试。有人能够告诉我更快或更有效的方法来检查空格键吗?这是我们员工的内部网络应用程序,只需要在MacOS上运行的Safari或Chrome中运行。任何帮助将不胜感激。
$("input#barcodeIn").keyup(function(e){
// CHECK FOR SPACEBAR PRESS IN THE BARCODE INPUT FIELD
if (e.keyCode == 32) {
// SHOW CHOSEN MENU INSTEAD OF BARCODE INPUT BECAUSE WE'RE TYPING A PRODUCT NAME
$("#inputSwitch").trigger("click");
// AUTOMATICALLY OPEN THE CHOSEN MENU
$("#cbProduct").trigger("chosen:open");
// GRAB WHAT WAS ENTERED INTO THE BARCODE INPUT
var input = $("#barcodeIn").val()+" ";
// ENTER THE INPUT TEXT INTO THE CHOSEN SELECT MENU
$(".chosen-search input").val(input);
// CLEAR THE BARCODE INPUT BECAUSE WE"RE USING THE CHOSEN SELECT MENU INSTEAD
$("#barcodeIn").val("");
return false;
}});
答案 0 :(得分:3)
您的无应答行为可能会导致一些原因:
keyup
事件,因此无论他们推送空格键的速度有多快,您的代码只会在发布时响应。$('.chosen-search input')
,因为我不确定它是否会动态更改。 var $chosenSearch = $('.chosen-search')
然后选择:$('input', $chosenSearch)
setTimeout()
异步执行代码,以便事件处理程序返回,然后代码执行。< / LI>
setTimeout()
中,确保无论处理时间长短,关键点至少会先做出反应。我希望有所帮助!
$(function() {
// cache the selectors to avoid re-scanning inside the event handler
var $inputSwitch = $('#inputSwitch');
var $cbProduct = $('#cbProduct');
var $barcodeIn = $('#barcodeIn');
// Not strictly necessary, but saves the messiness of callback-in-callback
function swapContext() {
// SHOW CHOSEN MENU INSTEAD OF BARCODE INPUT BECAUSE WE'RE TYPING A PRODUCT NAME
$inputSwitch.trigger("click");
// AUTOMATICALLY OPEN THE CHOSEN MENU
$cbProduct.trigger("chosen:open");
// GRAB WHAT WAS ENTERED INTO THE BARCODE INPUT
var input = $("#barcodeIn").val()+" ";
// ENTER THE INPUT TEXT INTO THE CHOSEN SELECT MENU
$(".chosen-search input").val(input);
// CLEAR THE BARCODE INPUT BECAUSE WE"RE USING THE CHOSEN SELECT MENU INSTEAD
$barcodeIn.val("");
}
$("input#barcodeIn").on('keydown', function(e){
// CHECK FOR SPACEBAR PRESS IN THE BARCODE INPUT FIELD
if (e.keyCode == 32) {
// Ensures we can return from the handler quickly
setTimeout( swapContext, 0 );
return false;
}});
});
由于您也是Javascript的新用户,请注意
var
下面的语句是包装函数的本地语句,绝对可以避免 在JS中使用全局变量 - 更好地学习稍微奇怪的方法 避免他们(并在此过程中,学习许多很酷的技巧 的JavaScript!)
答案 1 :(得分:1)
也许尝试“绑定”keyup事件以输入#barcodeIn,请参阅:http://www.solicitingfame.com/2011/11/09/jquery-keyup-vs-bind/
简而言之,链接就是这样的:
// detect the change
$('input#barcodeIn').bind("change keyup input",function(e) {
if (e.keyCode == 32) {
//enter code here
}
});