javascript - js同一对象,修改对象内变量值,无法同步
大家讲道理
大家讲道理 2017-04-11 09:57:31
[JavaScript讨论组]

代码流程如下
一个jQuery Deferred在运行的过程(就是when内的代码运行完了,准备运行done内的代码)中,有一个事件插入,打断了这个过程,并且修改了done所需要的一个变量(这个变量是个外部变量(不是函数内函数自己的变量)),但是done在执行的时候那个变量并没有发现被修改,这是为什么?

        // 处理 focus 事件(输入框获得焦点)
        // 显示建议
        topicEditor.$input.focus(function () {
            var $input = $(this);

            console.log('输入框获得焦点');
            if ($input.val() != '') {
                // 这里渲染出现了一些问题, TODO
                topicEditor.rangeSuggestion(true);  // 这个函数会修改topicEditor.isRangeSuggestion
               
                console.log('输入框焦点');
                console.log(topicEditor.isRangeSuggestion); // 这里出问题了
                topicEditor.rangeSuggestionFocus();
            }
            return true;
        });
        
        topicEditor.$input.on('input', function () {
            var $input = $(this);

            console.log('input事件触发');
            console.log($input.val());

// topicEditor.setSuggestion函数会返回一个Deferred对象
                $.when(topicEditor.setSuggestion($input.value)).done(function () {
                    // if ($input.is(':focus') == true && $input.val() != '') {
                    console.log('触发渲染');
                    console.log(topicEditor.isRangeSuggestion); // 这里出问题了
                        topicEditor.rangeSuggestion(true);
                        topicEditor.resetSuggestionFocus();
                    // }
                    return true;
                });
            return true;
        });
        

rangeSuggestion函数会根据isRangeSuggestion来决定是否进一步渲染
rangeSuggestion函数渲染后会生成一堆dom,并且将isRangeSuggestion设置为true
一个操作(alert)会引发focus事件,我在进行断点测试的时候发现focus内会把isRangeSuggestion设置为true
然后js会继续运行done内的代码,但是我发现isRangeSuggestion不是true了。
然后rangeSuggestion函数会重新渲染一堆dom(就跟之前的重复了)
实在不知道为什么

不知道这样描述的清楚不清楚。
这个bug已经折磨我很长时间了。

大家讲道理
大家讲道理

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

全部回复(1)
怪我咯

十分抱歉,错误找到了,是在后文一个位置,代码copy错了。。。
不是js的问题

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

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