javascript - 如何修复另一个“不能将类作为函数调用”(非 React)
问题描述
我在 JS 中编写了一些代码来连接两个选择框,以便将它们作为范围选择。行为是当您选择下限时,较高的会在下限之前被禁用,反之亦然。而且我认为这是防止用户选择范围的上限且值低于所选下限的常见用户体验。
在使用 webpack 编译脚本并第一次单击选择框后,我在class FormHandler {之前的行中收到错误。
TypeError: Cannot call a class as a function
at _classCallCheck (FormHandler.js:4)
at HTMLDocument.FormHandler (form.js:34)
接下来的点击工作完美,错误消失了。
我已经提供了全局underscore
和jquery
变量的 webpack。所以,我不需要在模块中显式地导入它们。
我对这个问题做了什么:1.检查了没有webpack但在包含类的纯js文件中的代码 - 有效。2.尝试将静态函数更改为普通函数并使用- 没有结果和相同错误new
中的关键字实例化类。common.js
3.查看互联网,只看到基于反应的答案。
// common.js
'use strict';
import FormHandler from './Forms/Helpers/FormHandler';
$(function(){
FormHandler.optionsRangeBoundsAdjust();
});
// FormHandler.js
"use strict";
class FormHandler {
/**
* Adds to the selected option the "selected" attribute.
*/
static selectOptionsAdjust () {
$('select').on('change', e => {
let $select = $(this);
var $val = $select.val();
_.each($select.children(), val => {
let $theOption = $(val);
if ($theOption.attr('selected') === 'selected') {
$theOption.removeAttr('selected');
}
if ($val === $theOption.val()) {
$theOption.attr('selected', 'selected');
}
});
});
}
/**
* Forbids to choose lower values in the high bound of the range than
* the value that has been selected in the lower bound of the range.
* Relates to the connected select tags, i.e. ranges.
*/
static optionsRangeBoundsAdjust () {
let $ranges = _.map($('form .range'), val => $(val));
_.each($ranges, $range => {
let $rangeLowSelectNode = $range.find('.range-scale-low select').eq(0);
let $rangeHighSelectNode = $range.find('.range-scale-high select').eq(0);
$rangeLowSelectNode.on('change', _.partial(setHighRangeAvailability, $rangeHighSelectNode));
$rangeHighSelectNode.on('change', _.partial(setLowRangeAvailability, $rangeLowSelectNode));
});
}
}
export default FormHandler;
我希望它从第一个 CHANGE 事件到选择框都可以正常工作,因为我不知道为什么它只发生一次然后消失。
解决方案(仅针对情况)
FormHandler.js在selectOptionsAdjust()
with 行中,let $select = $(this);
应该替换 withlet $select = $(e.target);
和避免this
。
PS也许我需要以某种方式深入了解this
...
解决方案
很可能不是关于你的代码,而是关于你的 webpack 配置。
也许避免在 FormHandler.js 中使用类会有所帮助:
// FormHandler.js
function selectOptionsAdjust () { ... }
function optionsRangeBoundsAdjust () { ... }
export { selectOptionsAdjust, optionsRangeBoundsAdjust };
// common.js
import * as FormHandler from './Forms/Helpers/FormHandler';
$(function(){
FormHandler.optionsRangeBoundsAdjust();
});
推荐阅读
- azure-managed-identity - 在 Azure 托管服务标识中 - 证书更新的频率
- c# - 重新初始化不显眼的 jquery 验证
- r - 当“此应用暂时禁用使用 Google 登录”时,您如何处理?
- python - 缺少日期和产品/商店组合的python代码
- postgresql - Postgresql COPY 命令问题
- html - 如何创建旁边有 2x3 网格的侧边栏
- c# - 使用 Oid/ASNEncodeData 创建 PublicKey 会引发 CryptographyException
- javascript - 如何通过使用反应或javascript动态计算顶部和左侧位置来相对于两个元素放置一个元素?
- python - 如何使用 .maketrans() 和 .unicodedata() 从 Python 3.x 中删除标点符号和特殊字符?
- javascript - 数据结构和算法