1

名前の変更と JsTree に問題があります。この問題を強調するために JS Fiddle を作成しました。http://jsfiddle.net/KJYrs/ . 私のシナリオは、入力された名前がデフォルト名ではないか、特殊文字が含まれていることを検証したいということです。最初に失敗した後に名前変更イベントを起動しようとすると、インライン エディターがルート ノードの上に表示されます。

<script type="text/javascript" class="source">
$(function () {
    $("#demo1").jstree({
        "plugins": ["themes", "html_data", "ui", "crrm", "contextmenu"]
    }).bind("rename.jstree", function (event, data) {
        //let's assume I do some vaidation here and it fails
        //so I want to rename until valid
        if (event.type === 'rename') {
            $("#demo1").jstree("deselect_all");
            $("#demo1").jstree("select_node", "#" + data.rslt.obj[0].id);
            $("#demo1").jstree("rename");
        }
    });
});
</script>

<div id="demo1" class="demo">
    <ul>
        <li id="phtml_1">   <a href="#">Root node 1</a>

            <ul>
                <li id="phtml_2">   <a href="#">Child node 1</a>

                </li>
                <li id="phtml_3">   <a href="#">Child node 2</a>

                </li>
            </ul>
        </li>
        <li id="phtml_4">   <a href="#">Root node 2</a>

        </li>
    </ul>
</div>

どんな助けや提案も大歓迎です。

4

1 に答える 1

1

名前の変更内で名前の変更を呼び出すため、問題が発生します。これはクラッシュではありませんが、他の問題を引き起こします。setTimeout簡単な解決策は、名前の変更が終了した後にasを使用して呼び出すことです。

$(function () {
    $("#demo1").jstree({
        "plugins": ["themes", "html_data", "ui", "crrm", "contextmenu"]
    }).bind("rename.jstree", function (event, data) {
        //let's assume I do some vaidation here and it fails
        //so I want to rename until valid
        if (event.type === 'rename') 
        {
            setTimeout(function(){
               $("#demo1").jstree("deselect_all");
               $("#demo1").jstree("select_node", "#" + data.rslt.obj[0].id);
               $("#demo1").jstree("rename");
            },100);
        }
    });
});

そして結果: http://jsfiddle.net/KJYrs/1/

ここで、解決する必要がある他の問題、名前の変更のキャンセル、およびこれが終了するまでメニューを無効にする必要があります。

于 2013-04-07T07:43:26.680 に答える