我正在测试我开发的一个网页,并且我在这个网页中运行了几个 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/