javascript - 变量赋值会阻止删除项目吗?

标签 javascript jquery

我正在创建可编辑区域,其中普通文本被输入替换,您可以编辑值。编辑后,您可以按 Enter 或单击按钮接受。在编辑期间,edited 变量设置为 true 以防止其他字段可编辑。这是 HTML

        <section class="person-info">
            <div class="row">
                <span id="name" class="editable">Martin Chikilian</span>
                <span id="living-place" class="editable">Portland, Oregon, USA</span>
                <span id="langs" class="editable">English, French, German</span>
            </div>
        </section>

和 JavaScript 代码:

$(function(){

var edited = false;

$('.editable').click(function(){
    if(!edited){
        edited = true;
        var _this = $(this);
        var confirmIcon = (_this.attr('id') == 'name') ? 'big-confirm' : 'confirm';
        var text = $(this).text();

        //this will be injected into editable element to replace existing text
        var input = $('<input type="text" value="' + text +'" /><span id="accept" class="icon ' + confirmIcon + '"></span>');

        _this.html('');
        _this.append(input);
        input.focus();
        var accept = _this.find('#accept');

        //binding click event to confirmation button
        accept.click(function(){
                var inputVal = input.val();
                _this.html(inputVal);
                //edited = false;
        });

        //binding event to enter press
        input.keypress(function(e){
            if(e.which == 13){
                var inputVal = input.val();
                _this.html(inputVal);
                edited = false;
            }
        });
    }
});

});

当你按回车键时一切正常,但是当我尝试通过单击“接受”按钮来做到这一点时,它什么也不做,除非我删除变量赋值edited = false;。但不能这样保留,因为它会阻止其他字段可编辑。问题是什么?是因为附加事件的元素(接受按钮)也被删除了吗?有人对这种行为有任何解决方案或明确的解释吗?提前致谢!

最佳答案

由于 #accept.editable 的子级,因此您正在监听的 click 事件bubbles up the DOM并且 .editable 上的点击处理程序也被触发,导致 edited === true

您可以通过使用 event.stopPropagation() 阻止事件传播来解决此问题:

accept.click(function(e){
    var inputVal = input.val();

    _this.html(inputVal);
    edited = false;
    e.stopPropagation();
});

示例: http://jsfiddle.net/6zAN7/13/

关于javascript - 变量赋值会阻止删除项目吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15180107/

相关文章:

javascript - 动态使用 webfont 图标作为输入字段中的占位符

javascript - 如何添加函数中存在的所有参数?

javascript - 我可以预期 jQuery 中的点击功能吗?

javascript - 通过额外数据扩展 promise

javascript - 尝试在 $.getJSON 函数之外使用 JSON 值

javascript - 在 Canvas 上绘图时鼠标坐标不正确

javascript - 动态创建表单并提交

javascript - 简单的 jQuery - 命名函数然后调用它

javascript - 在单击事件处理程序中延迟 window.open

javascript - 为 ClipboardEvent 创建自定义 clipboardData 属性