我正在测试我开发的网页,我在这个网页上运行了几个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);}});
答案 0 :(得分: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的更新,请参阅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);
}
});
});