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

时间:2013-06-06 09:04:53

标签: 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">

double class会导致问题吗?

第二次更新:

我刚刚在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);}});

3 个答案:

答案 0 :(得分:2)

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

错误在您的验证代码中,在您用来测试它是否有效的正则表达式模式中 - 您在模式的末尾有一个迷路]字符。

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

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

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

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

您可以直接替换它:

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

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

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

然而即便如此,我也不相信你想要的是什么。这将(对于您之前的版本)返回对3.1346.21710.45之类的字符串有效 - 即多个值连接在一起。在replace版本中,这是由g修饰符(替换多次出现)引起的。在我的版本中,它是由模式末尾的*完成的。

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

最后,由于看起来您只是在测试十进制值,因此您可能还会考虑使用parseFloat()而不是所有正则表达式。

希望有所帮助。

答案 1 :(得分:0)

检查您的“SpecificTextboxClass”输入类型,可能是您尚未添加。

答案 2 :(得分:0)

我注意到您没有设置代码来运行文档就绪/窗口加载。在DOM有机会设置之前,您可能会遇到竞争条件,其中您的代码已运行。

请确认您正在设置如下代码:

$( document ).ready(function() {

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