jquery - 特定的 jQuery 代码在 IE 中不起作用

标签 jquery internet-explorer

我正在测试我开发的一个网页,并且我在这个网页中运行了几个 jQuery 脚本。

网页在 Chrome 和 Firefox 中按预期显示和运行,但我目前正在 Internet Explorer(版本 9)中对此进行测试。

除以下脚本外,所有其他 jQuery 脚本都在此页面上运行:

$(".SpecificTextboxClass").change(function() {
    if ($(this).val() == 3) {
        $(".SpecificTextboxClass").not(this).val(0);}});

更新编辑:

这是文本框的代码:

<input type="text" name="scale" class="Validation SpecificTextboxClass" value="1">

双重类别是否会导致问题?

第二次更新:

我刚刚在 Internet Explorer 6 中加载网页并遇到了同样的问题。我也在使用 jQuery 1.9.1(据我所知)。

第三次更新:

删除验证代码后,问题似乎会自行解决:

$('.Validation').keyup(function () {
    if ("" != this.value.replace(/([0-9]|10)(\.\d{1,3})?]/g, '')) {
    this.value = this.value.replace(/[^0-9\.]/g, '').substring(0,5);}});

最佳答案

好的,多亏了你的 jsFiddle,我想我已经找到了问题所在。

该错误存在于您的验证代码中,存在于您用来测试其是否有效的正则表达式模式中 - 模式末尾有一个杂散的 ] 字符。

if ("" != this.value.replace(/([0-9]|10)(\.\d{1,3})?]/g, '')) {
                                                    ^
                                              this is invalid

这使得测试每次都失败,进而导致它更改代码中的值,这又似乎阻止了更改事件的触发。

您可以通过删除流氓 ] 字符来解决该问题。

我还建议使用正则表达式 .match() 而不是 .replace() 进行测试 - replace 是错误的类似这样的 if() 测试的函数。

你可以直接用这个替换它:

if (!this.value.match(/^(([0-9]|10)(\.\d{1,3})?)*$/)) {

这将具有完全相同的功能,但运行效率会更高。

参见here更新您的 jsFiddle 以演示修复方法。 (请注意,它有 console.log() 调用,因此请确保在 IE 中运行它时打开了 F12 开发工具)

但是即使如此,我也不相信这正是您想要的。这将(与您之前的版本一样)返回对像 3.1346.21710.45 这样的字符串有效的结果——即多个值连接在一起。在您的 replace 版本中,这是由 g 修饰符(替换多次出现)引起的。在我的版本中,它是通过模式末尾的 * 完成的。

如果您只需要单个值,请从您的版本中删除 g,或将 * 替换为我版本中的 ?

最后,由于您似乎只是测试十进制值,因此您也可以考虑仅使用 parseFloat() 而不是所有正则表达式。

希望有帮助。

关于jquery - 特定的 jQuery 代码在 IE 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16957942/

相关文章:

javascript - 导出数据表时排除/隐藏某些列

javascript - JQuery 验证消息奇怪地出现在两个单选按钮之间

javascript - 获取仅包含呈现元素的 iframe 的高度

javascript - jQuery 适用于 Chrome 和 Firefox,但不适用于 IE

internet-explorer - IE提示打开或保存服务器的json结果

javascript - 在具有相似类的多个元素上切换类

Jquery返回对象

javascript - IE 中的全局变量异常

internet-explorer - Fiddler 2 删除我的 Internet Explorer 代理设置

Jquery:在 IE 中未触发更改事件