如何在 JavaScript 中使用函数作为变量
How do I use a function as a variable in JavaScript?
我希望能够将代码放在一个地方,并从几个不同的事件调用它。
目前我有一个选择器和一个事件:
$("input[type='checkbox']").on('click', function () {
// code works here //
});
我在文件中的其他地方使用相同的代码,但是使用不同的选择器。
$(".product_table").on('change', '.edit_quantity', function () {
// code works here //
});
我尝试遵循 StackOverflow 上其他地方给出的建议,简单地给我的函数一个名字,然后调用命名函数,但这对我不起作用。代码根本无法运行。
$(".product_table").on('change', '.edit_quantity', function () {
calculateTotals() {
// code does not work //
}
});
因此,我尝试将代码放入与事件分开的自己的函数中,并在事件中调用它,这对我也不起作用。
calculateTotals() {
// code does not work //
}
那我做错了什么?
您可以将函数作为变量传递。
你想在 DOM 加载后为事件添加侦听器,JQuery 帮助$(document).ready(fn);
(ref)。
要修复代码,请执行以下操作:
$(document).ready(function() {
$("input[type='checkbox']").on('click', calculateTotalsEvent)
$(".product_table").on('change', '.edit_quantity', calculateTotalsEvent)
});
function calculateTotalsEvent(evt) {
//do something
alert('fired');
}
更新:
文斯问道:
这对我有用 - 谢谢你,但是一个问题:你说,"将你的函数作为变量传递"......我不明白你在哪里做这件事。你能解释一下吗?啧啧。–文 斯
响应:
在 JavaScript 中,你可以将函数分配给变量。在执行以下操作时,您可能一直这样做:
function hello() {
//
}
您定义window.hello
.
您正在添加到全局命名空间。
JavaScript 窗口对象
这通常会导致模棱两可的JavaScript架构/意大利面条代码。
我使用命名空间结构进行组织。
这方面的一个小例子是:
应用.js
var app = {
controllers: {}
};
您正在定义window.app
(只是一个 json 对象),其键为 controllers
且具有对象的值。
东西-CTLR.js
app.controllers.somethingCtlr.eventName = function(evt) {
//evt.preventDefault?
//check origin of evt? switch? throw if no evt? test using instanceof?
alert('hi');
}
您正在先前定义的app.controllers.somethingCtlr
上定义一个名为 eventName
的新键。
您可以使用 ();
调用该函数。
app.controllers.somethingCtlr.eventName();
这将转到对象中的键,然后调用它。您可以像这样将函数作为变量传递。
anotherFunction(app.controllers.somethingCtlr.eventName);
然后,您可以在函数中像这样调用它
function anotherFunction(someFn) { someFn();}
javascript
文件的结构如下:
+-html
+-stylesheets
+-javascript-+
+-app-+
+-app.js
+-controllers-+
+-something-ctlr.js
通过 chrome 开发者工具调用:
app.controllers.somethingCtlr.eventName();
您可以像这样将其作为变量传递:
$(document).ready(function() {
$('button').click(app.controllers.somethingCtlr.eventName);
});
JQuery (参考资料).
我希望这有帮助,里斯
看起来你走在正确的轨道上,但有一些不正确的语法。 调用函数时无需{ }
。 在 calculateTotals
函数中添加代码后,此代码应正常运行。
$(".product_table").on('change', '.edit_quantity', function () {
calculateTotals();
});
$("input[type='checkbox']").on('click',function() {
calculateTotals();
});
function calculateTotals() {
//your code...
}
你可以把它全部压缩到一个函数中。onchange 事件适用于复选框和文本输入(无需单击处理程序)。jQuery允许你添加多个选择器。
$('input[type=checkbox], .product_table .edit_quantity').on('change', function() {
console.log('do some calculation...');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="product_table">
<input type="checkbox">
<input class="edit_quantity">
</div>
- 访问嵌套函数结构中的JavaScript父函数变量
- Javascript函数变量传递语法问题
- JavaScript 函数变量范围问题
- 在 promise 中获取构造函数变量
- 将函数结果传递给Javascript中的另一个函数变量
- 用对象设置函数变量's值
- Javascript函数变量应生成错误,而不是未定义的错误
- 我可以访问用户脚本中的匿名函数变量吗?
- 在实例化期间使用构造函数变量
- 为什么在 JavaScript 中不能用函数变量覆盖字符串变量
- JavaScript 允许调用函数访问调用函数变量
- 如何在嵌套原型中访问 JavaScript 构造函数变量
- 对函数变量的 JavaScript 控制台日志输出感到困惑
- 如何将函数变量传递给主干模型上的 jQuery 事件
- 如何访问构造函数变量
- 实例函数变量不会更改
- 为什么函数变量在变量之后是未定义的
- 用内部函数变量更改外部函数变量?Javascript
- Javascript - 使用闭包递增静态函数变量模拟
- 异步 JavaScript 静态函数变量