JS中for循环“全局”变量的传递
在项目中,遇到了一个问题,描述如下:我们在联动下拉框中,选中值后,会在隐藏的控件中记录一下选中值的主键(展示的是名称)。但是,在取消选中的时候,没有把隐藏控件中的value值清空,导致在提交的时候,有时并不是用户的自发性行为。这是一个严重的问题,改吧。
首先,我们是根据一定的规则进行初始化控件的,代码如下
function AutoPerson(obj, url, hiddenObj) {
for (var i = 0; i < obj.length; i++) {
AutoInfoPersion($(obj[i]), url, $(hiddenObj[i]));
}
}
上述代码并没有处理控件中的值清空后隐藏控件值存在的问题。如下图所示,hduty_person中的值,如果不清空,在提交数据的时候,就会获取对应的值。

接下来,我是这样处理的
function AutoPerson(obj, url, hiddenObj) {
for (var i = 0; i < obj.length; i++) {
AutoInfoPersion($(obj[i]), url, $(hiddenObj[i]));
$(obj[i]).on("blur", function () {
if ($(this).val().trim() == "") {
$(hiddenObj[i]).val("");
}
});
}
}
然后,执行一下看看效果吧,结果并没有将数据的值清空。那么,调试一下js查看一下原因吧,发现在触发鼠标离开事件的时候,i的值是3,一脸懵,什么情况啊,怎么会是3,不应该是对应的吗,突然明白,对于blur事件来说,i就是一个全局变量,全局变量的值,变化所有的地方都会发生变化,所以啊,永远都不会按照你的想法进行实践。怎么样,难过吗?!
难过就解决吧
现在的问题很清晰,就是如何将变化的全局变量变为固定的传递变量,不会随着变化而发生变化。以下是解决方案:
function AutoPerson(obj, url, hiddenObj) {
for (var i = 0; i < obj.length; i++) {
AutoInfoPersion($(obj[i]), url, $(hiddenObj[i]));
backCheck($(obj[i]), $(hiddenObj[i]));
}
}
//回退事件检查是否没有数据,没有数据则将隐藏选中的控件中的值清空
function backCheck(obj, objHidden) {
obj.on("blur", function () {
if ($(this).val().trim() == "") {
objHidden.val("");
}
});
}
本质是将I的作用范围减小,传递到别的函数中,I的作用返回不会传递过去,也就在传递时,就结束了,所以,以上的方案是可以的,如果你的问题还存在,那么就将范围继续提前试一下,应该是OK的了。
最后:愿我们的代码总是符合需求!
JS中for循环“全局”变量的传递的更多相关文章
- js中for循环的研究
转自:http://blog.csdn.net/lushuaiyin/article/details/8541500 <html> <body> <b><ce ...
- 浅谈JS中 var let const 变量声明
浅谈JS中 var let const 变量声明 用var来声明变量会出现的问题: 1. 允许重复的变量声明:导致数据被覆盖 2. 变量提升:怪异的数据访问.闭包问题 3. 全局变量挂载到全局对象:全 ...
- js中的循环语句
js中的循环语句可分为三种:1.while:2.do……while:3.for. while的语法为 while (exp) { //statements;} var a=1,b=0; whil ...
- 深入探究js中的隐式变量声明
前两天遇到的问题,经过很多网友的深刻讨论,终于有一个相对可以解释的通的逻辑了,然后我仔细研究了一下相关的点,顺带研究了一下js中的隐式变量. 以下文章中提到的隐式变量都是指没有用var,let,con ...
- java和js中for循环的区别
java中for循环,先执行语句后循环 for (int i=1;i<10;i++){ for(int b=1;b<=i;b++){ System.out.print(b+"*& ...
- [js]js的惰性声明, js中声明过的变量(预解释),后在不会重新声明了
js的惰性声明, js中声明过的变量(预解释),后在不会重新声明了 fn(); // 声明+定义 js中声明过一次的变量,之后在不会重新声明了 function fn() { console.log( ...
- js中的循环
js中的循环是我们经常要用到的,现在进行一些归纳. 一.javascript种的循环. 1.循环对象 var o = { name: 'Jack', age: 20, city: 'Beijing' ...
- js中三种定义变量 const, var, let 的区别
js中三种定义变量的方式const, var, let的区别 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始化 ...
- JS中for循环变量作用域--解决for循环异步执行的问题
被这个问题困惑了很久,终于在网上找到了答案,感谢~ 现在分享给大家~ js中如何让一个for循环走完之后,再去执行下面的语句? 这涉及for循环变量作用域的问题,js中作用域只有函数作用域和全局作用域 ...
随机推荐
- Homebrew安装Mysql后的两步必要的命令
linxmousedeiMac:~ linxmouse$ mysql.server start Starting MySQL .. SUCCESS! linxmousedeiMac:~ linxmou ...
- HTML连载62-固定定位练习、z-index属性
一.固定定位应用场景 1.练习 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- HDU1010 --- Tempter of the Bone(dfs+剪枝)
小明做了一个很久很久的梦,醒来后他竟发现自己和朋友在一个摇摇欲坠的大棋盘上,他们必须得想尽一切办法逃离这里.经过长时间的打探,小明发现,自己所在的棋盘格子上有个机关,上面写着“你只有一次机会,出发后t ...
- ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline - Part II
https://www.cnblogs.com/artech/archive/2007/09/13/891266.html 二.ASP.NET Runtime Pipeline(续ASP.NET Ht ...
- 题解【洛谷P1725】琪露诺
题面 典型的单调队列优化\(\text{DP}\)题. 不难想到设\(dp_i\)表示以\(i\)结尾能得到的最大冰冻指数. 这样设的转移方程也很简单:\(dp_i=\max\left\{ dp_j+ ...
- 【16】LRUChache
题目 LRU 思路 LRU 大家都不陌生,操作系统的作业做过,思路就是一旦添加或者访问某个元素,则将其的"访问属性"置零,而其他元素的访问属性统统减一,这样一来,访问属性最小的元素 ...
- JAVA 注解教程(四)Java 预置的注解
@Deprecated 这个元素是用来标记过时的元素,想必大家在日常开发中经常碰到.编译器在编译阶段遇到这个注解时会发出提醒警告,告诉开发者正在调用一个过时的元素比如过时的方法.过时的类.过时的成员变 ...
- TD - 数据验证
基本方法 this.assetCounts.focus();//聚焦 this.btnSave.cancel();//按钮取消 this.assetPerson.isValid()//是否有效,tru ...
- DOM盒模型和位置 client offset scroll 和滚动的关系
DOM盒模型和位置 client offset scroll 和滚动的关系 概览 在dom里面有几个描述盒子位置信息的值, pading border margin width height clie ...
- VS2015+EF+MySql问题
1.出现框架不兼容问题: 解决方法:a.在web.config或者app.config中加入所示代码: b.引用mysqlConnector.net中的所有dll,一般路径在D:\Program Fi ...