2015-07-28 1 views
0

Я организовал JS-часть в модули, используя библиотеку под названием RequireJS. Он отлично работает, но в последнее время я нашел очень непоследовательную ошибку в Firefox (которая является единственным браузером, который нам нужно поддерживать), хотя до сих пор все работает нормально и в Chrome). Прежде всего у меня есть большой файл с именем util.js, который я загружаю в других частях настроить основные функции, которые я использую, чтобы абстрагировать DOM, наиболее важная часть его, чтобы понять суть проблемы заключается в следующем:Неисправность функции с чистым JS, throught requireJS, при связывании слушателей с ярлыками

"use strict"; 
define(function() { 
    ... 
    Util.killCtrl = function(action) { 
    return function(event) { 
     if(event.ctrlKey) { 
     action && action(event); 
     if(!Util.intersection([72, 76, 82], [event.keyCode]).length) 
      event.preventDefault(); 
     } 
    }; 
    Util.intersection = function(a, b) { 
    return a.filter(function(e) { 
     return b.indexOf(e) != -1; 
    }); 
    } 
    ... 
    return Util; 
}); 

Я просто используйте эту функцию, чтобы упростить привязку пользовательских ярлыков, например CTRL+P. При использовании в следующем коде, он отлично работает (это контроллер, который файл называется sale.js):

"use strict"; 

define(['util', 'basic', 'language', 'restrict/models/orderItem', 'modal', 'tableSelector'], 
    function(Util, Basic, lang, OrderItem, Modal, TableSelector) { 
    ... 
    addEventListener('keyup', Util.killCtrl(function(event) { 
    switch(event.keyCode) { 
     case 66: //B -> search prod 
     searchProd.click(); 
     break; 
     case 80: //P -> print order 
     print.click(); 
     break; 
     case 69: //E -> remove prod 
     removeProd.click(); 
     break; 
     case 46: //DEL -> quick remove prod 
     var selectedPos = tableSelector.getSelectedRow()[0]; 
     deletePos(selectedPos); 
     break; 
     case 86: //V -> back 
     back.click(); 
     break; 
     case 67: //C -> focus code 
     OrderItem.orderItems = Util.woIndex(OrderItem.orderItems); 
     OrderItem.orderItems = Util.woIndex(OrderItem.orderItems); 
     form.code.focus(); 
     break; 
     case 68: //D -> detail item 
     var pos = tableSelector.getSelectedRow()[0];   
     var orderItem = OrderItem.orderItems.filter(function(oi) { return oi.displayOrder == pos })[0]; 
     detailForm.displayOrder.value = orderItem.displayOrder; 
     detailForm.name.value = orderItem.name; 
     detailForm.amount.value = orderItem.amount; 
     Basic.syncNF(detailForm.amount); 
     detailButton.click(); 
     break; 
     case 81: //Q -> focus amount 
     amountFacade.focus(); 
    } 
    })); 
    ... 
}); 

То же самое не работает должным образом в следующем контроллере, billing.js:

define(['util', 'basic', 'language', 'restrict/models/payer', 'restrict/models/paymentType', 
    'restrict/models/payment'], function(Util, Basic, lang, Payer, PaymentType, Payment) { 
    ... 
    addEventListener('keyup', Util.killCtrl(function(event) { 
    switch(event.keyCode) { 
     case 80: // P 
     printButton.click(); 
     break; 
    } 
    })); 
    ... 
}); 

В это время он открывает экран печати по умолчанию из браузера, вместо запуска команды, которую я дал !! Другие функции контроллера довольно хороши, и нет проблем в billing.js, но это. Все контроллеры загружаются с файлом под названием main.js, здесь идет:

"use strict"; 
require(['util', 'basic'], function(Util, Basic) { 
    if(Basic.verifyPlaces('sale/fastSelling')) { 
    var requirements = ['restrict/sale', 'dynamicSearch']; 
    require(requirements); 
    } 
    else if(Basic.verifyPlaces('billing/receipt')) { require(['restrict/billing']); } 
    else if(Basic.verifyPlaces('sale/tables')) { require(['restrict/access']); } 
}); 

Все файлы загружаются, потому что все функциональные возможности и работает, кроме этого, Вы когда-нибудь сталкивались с подобной проблемой?

Я сделал некоторые журналы, в preventDefault части от util.js, а иногда (например, при использовании CTRL+I) он открывает Информация о странице вместе с бревном, а иногда (например, при использовании CTRL+P) он открывает PRINT и Безразлично Не записывай ничего.

Спасибо заранее

ответ

0

В моем коде, я использовал killCtrl над "keyup" событий, когда я зарегистрировал его "keydown" и она работала хорошо

Смежные вопросы