RequireJS 回调函数到 return 键事件的值

RequireJS call back function to return value for keyevents

如何使用 requireJS 回调函数从外部 javascript 文件

中定义的事件处理程序获取值
<input type="text" id="shopprice" 
onkeypress= "require(['jqueryutils'],function(utils){var a =     
utils.keyPressPrice(event); alert(a); return a;});" ></input>

事件处理程序 utils.keyPressPrice returns false 除数字以外的键码。警报正确显示结果(true 表示数字,false 表示非数字)。我怎样才能让 onkeypress 事件响应这个结果?

require 调用本质上是一个 异步 调用。您不能 return 来自异步调用的同步值。 (RequireJS 提供了一种 require 的同步版本,但它需要在它之前进行异步调用,所以它不是真正的解决方案。)你可以 return 一个承诺,但 DOM不适用于 return 承诺的事件处理程序。

做您想做的事情的正确方法是:

  1. 生成 HTML 包含嵌入在 HTML.

    [=35 中的事件处理程序=]
  2. 编写一个 RequireJS 模块,使用 addEventListener 或使用 jQuery 的 .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']);.

通过在 javascript 中设置事件侦听器并在外部脚本文件中调用处理程序解决了问题。

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