3

我正在测试我开发的网页,并且在该网页中运行了几个 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);}});
4

3 回答 3

2

好的,感谢您的 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})?)*$/)) {

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

请参阅此处以获取 jsFiddle 的更新以演示修复。(注意它里面有console.log()调用,所以当你在 IE 中运行它时,确保你打开了 F12 开发工具)

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

如果您只想要一个值,请g从您的版本中删除,或用我的*a替换?

最后,因为看起来你只是在测试一个十进制值,你也可以考虑只使用parseFloat()而不是所有的正则表达式。

希望有帮助。

于 2013-06-06T12:39:59.927 回答
0

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

于 2013-06-06T09:09:20.997 回答
0

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

请确认您正在设置您的代码,如下所示:

$( document ).ready(function() {

    $(".TAB1val1").change(function() {
        if ($(this).val() == 3) {
            $(".TAB1val1").not(this).val(0);
        }
    });
});
于 2013-06-06T11:17:39.237 回答