搜索
javascript - js关于函数内向外传递变量的问题
大家讲道理
大家讲道理 2017-04-10 16:33:35
[JavaScript讨论组]

项目中一个表单有很多项,获取修改过的表单项的组成json数据ajax提交修改的功能实现,比如:

<input type="text" class="inputxt" name="a1" value="111">
<input type="text" class="inputxt" name="a2" value="222">
<input type="text" class="inputxt" name="a3" value="333">
...
a[n]个表单项

<script>
var modjson;
$('.inputxt').each(function(){
  $(this).bind('change',function(){
      modjson+=","+$(this).attr("name")+":"+$(this).val();
  });
});
if(modjson){
    modjson=modjson.substr(1);
    modjson="{"+modjson+"}";
    console.log(modjson);//获取修改过的表单项json数据,类如{a1:'555',a3:'77'}
}
</script> 

这样肯定不行,js的函数内向外传递变量,网上搜索匿名函数闭包可以实现,但是以上的情况在绑定事件的时候可以吗?就是什么情况下适用使用闭包可以向外传递变量?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(6)
怪我咯

1)你为什么要没change一次的都要记录一次呢?
2)你在数据加载后记录表单项的原始值,等到你需要提交数据的时候再获取表单项的最后结果,和原始值做一次比较,获取变化后的值一并提交不就好了

还是说有其它的业务需求?

PHP中文网

题主,其实你最主要的问题不是用不用闭包,而是对JSON的使用不当。JSON是什么?JSON就是对象字面量啊!所以用一个对象来代替你那个字符串变量就会好多了:

var obj = {};
var hasChange = false;
$('.inputxt').each(function() {
    $(this).bind('change', function() {
        hasChange = true;
        obj[$(this).attr("name")] = $(this).val();
    });
});
    if(hasChange) {
        console.log(JSON.stringify(obj));
    }

怎么样,是不是好多了?

怪我咯

用闭包吧,不然就申明为全局变量

阿神

var modjsonif放到回调里。

天蓬老师

1.modjson这个全局变量不管回调内外都是可以获取到了哦。
2.change回调回调函数是异步执行,而后面if(modjson)中代码是同步的,这就是为什么if中的逻辑无法和change中回调达到预想的效果。具体的去谷歌一下js事件轮询。
3.要达到效果,把if中的逻辑放到回调里面去吧

天蓬老师

你不觉得:你写的很诡异吗?每 change 一次就在modjson后面插入一段。一串字打下来,肯定老长老长啦

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号