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()の値を出力してから、新しい値を出力します。次に、この 2 つを比較してみます。次に要素をクリックするmyeditabledivと、以前の変数が表示され、次に新しい変数が表示されます。3 回目は最初の 2 つをクリックし、次に新しい 3 つ目をクリックします。などなど。フェイスパームの準備ができている人もいるに違いありませんが、私はこれを見つけるのに十分ではありません. のせいですEvent.observeか?編集:ifステートメントを編集しました。

4

1 に答える 1

2

.one()を使用してハンドラーをアタッチし、.focusout毎回ハンドラーを追加する代わりに 1 回だけ実行することができます。

そう:

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