1

非表示フィールドの値をリンク内のrel属性の値に設定できるようにしたいと思います。

$("#currentDir").val($(".jstree-clicked").attr("rel"));

しかし、これは機能しません。ただし、この単純な式は問題なく機能します。

$("#currentDir").val("TEST");

これにより、id=currentDirの非表示フィールドが値「TEST」に設定されます。しかし、なぜ他の式が機能しないのですか?

編集:

指摘したように、このステートメントが呼び出されたとき、クラスjstree-clickedの要素は存在しません。そして、私が以下にコメントしたように、私はそれがコールバックとして入る必要があると思います。しかし、どこにあるのかわかりません(いくつかの場所を試しましたが、どれも機能しません)。

JsTreeコードは次のとおりです。

    <script type="text/javascript">
        var url;
        $(function () { 
            $("#demo2")
            .bind("loaded.jstree", function () { 
              alert($(".jstree-clicked").length); //This works as a callback, but unfortunately the cookie seems to not have been set yet...

                $("a").click(function () {
                    url = "?url=" + $(this).attr("rel");
                    $('#result').load('/Customers/Files/' + encodeURI(url));
                    $('#currentDir').val($(this).attr("rel"));    
                });

            }).jstree({
                "html_data": {
                    "ajax": {
                        "url": "/Customers/Directories/"
                    }
                },
                "ui": {
                    "select_limit": 2,
                    "select_multiple_modifier": "alt",
                    "selected_parent_close": "select_parent"//,
                },
                "themes": {
                    "theme": "classic",
                    "dots": true,
                    "icons": true
                },
                "plugins": ["themes", "html_data", "ui", "cookies"]
            });

    });

    </script>

ご覧のとおり、クリック時にcurrentDir非表示フィールドの値を設定するコールバックがすでにあります。ただし、ポストバックもあるため、JsTreeを以前と同じに設定するCookieプラグインを使用してページをリロードします。ここで、jstree-clickedは選択したフォルダーを示します。したがって、クリック関数は正常に機能し、currentDirを設定しますが、ポストバックの後、別のコールバックを取得する必要があります(ここで最初に尋ねたステートメント、つまりツリーが作成された後を想定しています)。

何人かの人々が求めたように、ここにhtmlソースを投稿する意味は実際にはないと思います。クラスとすべてがありますが、Firebugから同じものを提供します。

<a rel="HtmlHelpers" class="jstree-clicked"><ins class="jstree-icon">&nbsp;</ins>HtmlHelpers</a>

問題は、関数が呼び出されたときにまだそれがないことであるように見えます。繰り返しになりますが、ステートメントを適切な場所に配置するためのヘルプ(コールバック?)はありがたいです!

編集2:

さて、ツリーがロードされた後に実際にトリガーされるコールバックを取得しました(コメント付きの上記の.bind部分内の追加を参照してください)。しかし、ツリーがロードされていても(要素の数を示すアラートボックスで確認されます)、Cookieプラグインが実行されていないように見えるため、私が求めているステートメントはまだ役に立ちません。私が今挿入したステートメントは、jstree-clicked要素が存在するかどうかを確認するために、応答の1つで提案されたものですが、まだ存在しません。それで、Cookieがjstree-clickedクラスを設定した後にこれを呼び出す方法を知っている人はいますか?

4

2 に答える 2

2

値の設定とは関係ありませんが、属性から値を取得し.jstree-clickedます。

次のコードを使用して、要素が存在するかどうかを確認してください。

alert($(".jstree-clicked").length);

> = 1以外を返す場合は、要素が存在しないことがわかります。

複数の要素がある場合でも、.attr()メソッドは最初の既知の要素に必要な属性を返すため、.jstree-clickedクラスはrel属性なしで他の場所に存在する可能性があります。

http://api.jquery.com/attr/

于 2010-08-18T10:16:14.970 に答える
0

たくさんグーグルした後、私はついに答えを見つけました。cookieオプションを使用する場合は、代わりにjqueryのバインド部分でこれを使用する必要があります。

.bind("reselect.jstree", function () {

その後、Cookieが選択されたアイテムを設定するまでコールバックはトリガーされず、機能します。

于 2010-08-19T21:18:13.437 に答える