2015-02-02 3 views
0

Как я могу использовать функции обратного вызова requireJS для получения значения из обработчика события, определенный во внешних файл JavaScriptRequireJS перезвонит функцию возвращала значение для keyevents

<input type="text" id="shopprice" 
onkeypress= "require(['jqueryutils'],function(utils){var a =  
utils.keyPressPrice(event); alert(a); return a;});" ></input> 

обработчик событий utils.keyPressPrice возвращает false для других, чем те, кодов клавиша для цифр. Предупреждение корректно отображает результаты (true для цифр и false для цифр). Как я могу ответить на этот результат onkeypress?

ответ

0

Звонок require по сути является асинхронным звонком. Вы не можете вернуть синхронное значение из асинхронного вызова. (Существует некоторая синхронная версия require, которую предлагает RequireJS, но перед ней требуется асинхронный вызов, поэтому на самом деле это не решение.) Вы можете вернуть обещание, но DOM не предназначен для работы с обработчиками событий, которые возвращают обещания.

Правильный способ сделать то, что вы хотите сделать это:

  1. Подготовить HTML, который делает не содержать обработчики событий, встроенные в HTML.

  2. Напишите модуль RequireJS, который использует addEventListener или использует jQuery's .on() (он как хотите) для добавления обработчиков событий к элементам, которые вас интересуют. Например:

    define(['jquery', 'jqueryutils'], function($, utils) { 
    
    $("#shopprice").on("keypress", function (event) { 
        var a = utils.keyPressPrice(event); 
        alert(a); 
        return a; 
    }); 
    
    }); 
    
  3. Требовать этот модуль к концу вашего HTML-файла. Если модуль выше находится в файле с именем handlers.js, вы делаете require(['handlers']);.

0

Решение проблемы путем установки прослушивателей событий в javascript и вызовом обработчика во внешнем файле сценария.

$("#shopprice").keypress(function(e) 
{ 
utils.keyPressPrice(e); 
});