【发布时间】:2021-02-24 04:00:16
【问题描述】:
我的应用程序前端是在 angular js 1.4.14 中构建的,我仅在 IE-11 中遇到以下错误:
对象不支持属性或方法 'parseInt'
这是我的 HTML:
<div class="form-group">
<label class="col-sm-2 control-label">Pickup time <span ng-show="pickupTimeIsRange()">range</span>:</label>
<div class="row col-md-10">
<div class="col-md-3">
<input placeholder="{{ pickupTimeIsRange() ? 'Start time' : 'Time' }}" class="form-control" ui-timepicker ng-model="info.pickup_time_start">
</div>
<div class="col-md-3" ng-show="pickupTimeIsRange()">
<input placeholder="End time" class="col-md-4 form-control" ui-timepicker ng-model="info.pickup_time_end">
</div>
</div>
</div>
这是我的 js 代码:
info.pickup_time_start = getTime('start');
info.pickup_time_end = pickupTimeIsRange() ? getTime('end') : null;
function getTime(time) {
return !_.has(info.pickup_time, time) || _.isEmpty(info.pickup_time[time])
? null
: moment(info.pickup_time[time], 'HH:mm');
}
现在,这里出了什么问题?我的代码是在应用程序运行时编译的,因此上述错误发生在 lib.js 文件中,该文件是一个已编译的 js 代码文件,我不知道在哪里实际使用了 Number.parseInt。有没有办法强制使用全局parseInt?或者有什么方法可以弄清楚Number.parseInt 的确切使用位置?
我知道当上面的代码运行时会弹出这个错误,比如当ui-timepicker被执行时,当我尝试选择一个时间时。所以ui-timepicker 在代码中的某处使用了Number.parseInt,我无法弄清楚究竟在哪里。
编辑
顺便说一句,它在我的本地使用相同的浏览器、相同的代码和相同的操作系统运行良好。这很奇怪,在实时实例上它不起作用!这是为什么呢?
【问题讨论】:
-
某处的某些代码很可能调用了 IE11 中不存在的
Number.parseInt。那里只有全球parseInt。两者的工作方式完全相同,因此仅对于 IE,它可以填充为Number.parseInt = parseInt(带有适当的保护)。但是,从根本上来说,您似乎有一些不符合 IE11 的代码,并且修补 this 可能是一个临时解决方案。代码不存在于您显示的内容中,因此您必须找到它的位置并随后解决它。 -
@VLAZ 浏览器中的错误告诉我它在 lib.js 文件中,但那是框架文件,那么我怎么知道我的代码的哪一部分触发了它?
-
通过创建minimal reproducible example 并使用调试器
-
你使用哪个框架?您是否使用了一些与 IE 不兼容的代码,然后对其进行了 polyfill?您还可以检查网站在服务器上运行时是否有一些文件未加载。您提供的代码中与
parseInt没有任何关系,我们无法通过它重现问题。我建议您可以提供一个可以重现问题的代码 sn-p,以便我们了解如何提供帮助。
标签: javascript angularjs internet-explorer-11