- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Judge gem 构建简单的客户端验证。
在我选择对“blur”而不是按钮点击运行验证之前,一切都很完美。
脚本:
var divs = ["advertisement_age","advertisement_weight","advertisement_region_id","advertisement_height","advertisement_name","advertisement_phone_number","Record_Start_Time",
"Record_End_Time","Record_Start_Time2","Record_End_Time2","advertisement_description", "advertisement_description_ru", "advertisement_terms_of_service"];
var arrayLength = divs.length;
var error_count =0;
for (var i = 0; i < arrayLength; i++) {
$(document.getElementById(divs[i])).blur(function(){
judge.validate(document.getElementById(divs[i]), { // This line causes error
valid: function(element) {
element.style.border = '1px solid green';
},
invalid: function(element, messages) {
element.style.border = '1px solid red';
// alert(messages.join(','));
}
});
});
}
在 Mozzila Firebug 中,当我重新加载页面时没有任何错误消息。触发模糊事件时出现错误。
错误信息:
TypeError: this.element is null
this.attrValidators = root.JSON.parse(this.element.getAttribute('data-validate')...
我不明白为什么它在第二个 document.getElementById(divs[i])
而不是第一个数组有效时崩溃?
有什么建议吗?
谢谢
最佳答案
问题是当 blur
事件触发时,for
循环已经退出并且 i
的值将被设置为for
循环退出时它到达的最后一个值。然后,最终,当 blur
事件触发时,judge.validate(document.getElementById(divs[i])
将失败,因为 i
不是什么你期望的。解决它的一种方法是对 i
的值形成一个闭包:
for (var i = 0; i < arrayLength; i++) {
(function(index) { // index is the current i value
$(document.getElementById(divs[index])).blur(function() {
judge.validate(document.getElementById(divs[index]), {
valid: function(element) {
element.style.border = '1px solid green';
},
invalid: function(element, messages) {
element.style.border = '1px solid red';
// alert(messages.join(','));
}
});
});
})(i); // pass i to the immediately executing anonymous function (closure)
}
所以我们将 $.blur
代码放在一个闭包中,并将 i
传入。在闭包中 i
将被称为 索引
。 index
的值将是循环执行代码时的预期值,并在循环退出后保持该值。注意我们现在如何在 blur
处理程序中使用 divs[index]
。
要解决这个特殊问题的是 blur
事件处理函数是异步的,在 blur 事件发生之前不会计算 divs[i]
将在 for
循环退出并将 i
的值保留为其最后一个值 i == arrayLength - 1
后的某个时间。
这里有一些关于它的更多阅读:Calling an asynchronous function within a for loop in JavaScript
解决此问题的另一种方法是使用 document.getElementById(divs[i])
保存找到的元素,然后在处理程序中使用 this
:
for (var i = 0; i < arrayLength; i++) {
var field = $(document.getElementById(divs[i]));
field.blur(function() {
judge.validate(this, { // `this` is the field element
valid: function(element) {
element.style.border = '1px solid green';
},
invalid: function(element, messages) {
element.style.border = '1px solid red';
// alert(messages.join(','));
}
});
});
}
我会选择后一种解决方案,因为它更干净。只是想先解释一下闭包。
关于javascript - TypeError : this. 元素为空,Rails with Judge gem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27946559/
发表时间:2024 期刊会议:arxiv 论文单位:Arizona State University 论文作者:Dawei Li, Bohan Jiang, Liangjie Hua
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 4 年前。 Improve th
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我正在研究问题 00156,Anagrams。 我编译了代码,它在我这边工作得很好,但是当我上传代码时,它在在线判断上返回运行时错误。 我想了解错误在哪里,但我对 C++ 很陌生,所以请保持简单,提前
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我在看问题Magic Square我确信有一些循环,如果条件可以解决这个问题,但我很想知道是否有任何已知的算法/数据结构来解决这个问题。我对精确的解决方案不感兴趣,但对算法/数据结构的任何提示都会有所
我对竞争性编程还很陌生,我已经在 CodeForces 中遇到过几次这个问题,但我不太确定发生了什么。 问题是,当我运行这段代码时(来自 http://codeforces.com/contest/1
我需要有关 Uri Online Judge 网站中的逻辑数学问题的帮助: 提交的代码以“var n”开始,我使用 var 行来处理输入示例: var n; var j; var n = parseI
这些是关于 codechef 的问题的链接和 UVa online Judge 我的C代码是这样的: #include int main() { char c; int n,m; char d; i
我正在使用 Judge gem 构建简单的客户端验证。 在我选择对“blur”而不是按钮点击运行验证之前,一切都很完美。 脚本: var divs = ["advertisement_age","ad
问题是这样的..输入 n [the number of multiplications #include using namespace std; int main() { long int
描述:对于由多个非负整数组成的数组,数组归一化意味着每个元素都将除以数组的总和。假设数组至少由一个元素组成,并且元素的总和不会超过诠释。 输入:几个非负整数 输出:归一化的结果。 示例输入1 2 3
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我可以解决Copying Books Problem使用二进制搜索方法,因为它很容易实现。但是我刚刚开始解决动态规划问题,我想知道该问题的动态规划解决方案 Before the invention o
这个问题在这里已经有了答案: How to verify if a file exists in a batch file? (3 个答案) 关闭 8 年前。 伪代码: if file exists
我正在解决JAVA编程挑战中的鄂尔多斯数问题。该代码在我的机器上完美运行。然而在线判断会导致运行时错误。谁能指出我犯的错误吗? http://uva.onlinejudge.org/index.php
我正在尝试做题http://acm.timus.ru/problem.aspx?space=1&num=1119在 Timus Online Judge 上。但是,由于某些奇怪的原因,递归函数不起作用
我正在对法国的法官任命系统进行一些数据分析,并使用一些代码来执行此操作。但我遇到了正则表达式问题。 我的数据由一大堆法院和法官任命组成。 这是一个示例列表: Appellate Court of Pa
我试图在 UVa ( http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=sho
这个问题困扰我好久了。它必须具有动态编程解决方案,因为它已被标记为“动态编程”。请提出一个方法。 Question Link 简化的问题陈述: There are 3 islands having N
我是一名优秀的程序员,十分优秀!