我希望能够将代码放在一个地方并从几个不同的事件中调用它。
目前我有一个选择器和一个事件:
$("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 //
}
那么我做错了什么?
答案 0 :(得分:4)
您可以将函数作为变量传递。
您希望在加载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');
}
<强>更新强>
文斯问:
这对我有用 - 谢谢你,但是有一个问题:你说,“将你的功能作为变量传递”......我不知道你在做什么。你可以解释吗 ?韩国社交协会。 - Vince
<强>响应:强>
在JavaScript中,您可以将函数分配给变量。
您可能在执行此操作时始终执行此操作:
function hello() {
//
}
您定义window.hello
您正在添加到全局命名空间
JavaScript window object
这通常会导致模糊的JavaScript架构/意大利面条代码
我使用命名空间结构进行组织
一个小例子是:
<强> app.js 强>
var app = {
controllers: {}
};
您正在使用window.app
的键定义controllers
(仅json个对象),其值为对象。
<强>东西-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
app.controllers.somethingCtlr.eventName();
您可以将其作为变量传递:
$(document).ready(function() {
$('button').click(app.controllers.somethingCtlr.eventName);
});
JQuery(ref)。
我希望这有帮助, 里斯
答案 1 :(得分:2)
看起来你是在正确的轨道上,但有一些不正确的语法。调用函数时不需要{ }
。在calculateTotals
函数内添加代码后,此代码应该正常运行。
$(".product_table").on('change', '.edit_quantity', function () {
calculateTotals();
});
$("input[type='checkbox']").on('click',function() {
calculateTotals();
});
function calculateTotals() {
//your code...
}
答案 2 :(得分:0)
你可以将它全部压缩成一个函数。 onchange事件适用于复选框和文本输入(不需要单击处理程序)。 jQuery允许您添加多个选择器。
$('input[type=checkbox], .product_table .edit_quantity').on('change', function() {
console.log('do some calculation...');
});
&#13;
<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>
&#13;