3

我正在编写一个脚本来监听属性contenteditable并模拟更改的处理程序。并且代码运行多次。我不确定为什么会这样。Edit2:更新了解决问题的代码。代码如下所示:

    Event.observe(window, 'load', init, false);

    function init() {
        makeEditable('myeditablediv');
    }

    function makeEditable(id) {
        Event.observe(id, 'click', function(){test($p(id))}, false);
    }

    function test(obj) {
        var pre = obj.innerHTML;

        $(obj).one("focusout", function(){
            newcontent = obj.innerHTML
            alert(pre + ' ' + newcontent);
            if (newcontent !== pre) {alert('content is not the same')};         
        });
    }

这最初是一个原型脚本,这就是为什么$p我不得不改变它的选择器,因为我也使用 jQuery。

test()我输出之前的值,然后是新的值。然后我尝试比较这两者。下次我单击元素myeditablediv时,会显示以前的变量,然后显示新变量。我第三次点击,前两次,然后是新的第三次。等等等等。我敢打赌你们中的一些人现在已经准备好了你的脸,但我还不够好,无法发现这一点。是因为Event.observe? 编辑:编辑了 if 语句。

4

1 回答 1

2

您可以使用.one()附加.focusout处理程序并让它只运行一次,而不是每次添加越来越多的处理程序。

所以:

$(obj).one("focusout", function(){
    //....
});
于 2013-01-31T21:57:28.917 回答