Frage

Ich möchte den Wert eines rel-Attribut in einem Link, den Wert eines verborgenen Feldes einstellen können:

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

Aber das funktioniert nicht. Dieser einfachere Ausdruck funktioniert gut aber:

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

Dass setzt das versteckte Feld mit id = CURRENTDIR auf den Wert „TEST“. Aber warum nicht die anderen Ausdruck Arbeit?

EDIT:

Wie bereits ausgeführt, das Element mit der Klasse jstree geklickt nicht existiert, wenn diese Anweisung aufgerufen wird. Und wie ich weiter unten kommentiert, nehme ich es als Rückruf gehen muss. Aber ich weiß nicht, wo (haben mehrere Orte versucht, aber keiner von ihnen Arbeit).

Hier ist der JsTree Code:

    <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>

Wie Sie sehen können, habe ich bereits einen Rückruf haben, die den Wert von CURRENTDIR versteckt Feld setzt auf Klick. Aber da wird es Postbacks auch sein, ich bin Neuladen der Seite mit einem Cookie-Plugin, das setzt die JsTree auf die gleiche wie zuvor, mit jstree geklickt einen ausgewählten Ordner bedeutet. So ist die Klick-Funktion funktioniert gut, und setzt die CURRENTDIR, aber nach einer Postbacks muß ich in einem anderen Rückruf bekommen (ich mit der Aussage, gehe ich davon hier etwa ursprünglich gefragt, das heißt, nachdem der Baum erstellt wurde.)

Ich glaube nicht, dass es wirklich jeder Punkt Kommentar verfassen HTML-Quellcode als mehrere Leute gefragt, es die Klasse und alles hat, aber ich werde es genau die gleiche, von Firebug:

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

Das Problem scheint es zu sein, hat es noch nicht, wenn die Funktion aufgerufen wird. Also noch einmal, jede Hilfe die Aussage an der richtigen Stelle mit bekommen (einem Rückruf?) Geschätzt!

EDIT 2:

Ok, so habe ich einen Rückruf, dass tatsächlich Auslöser nach dem Baum geladen wird (siehe Zusatz im .bind Teil oben mit Kommentaren). Aber es scheint, dass, obwohl der Baum (bestätigt durch ein Warnfeld der Nummer eines Elements wird gezeigt) geladen wird, Plugin die Cookies scheinen nicht gewesen ausgeführt haben, so die Aussage Ich bin nach wie vor ist nutzlos. Die Aussage, die ich eingefügt habe jetzt ist der in einen der Antworten vorgeschlagen, zu prüfen, ob das jstree geklickt ein Element vorhanden ist, und es immer noch nicht. Wer also weiß, wie ich kann diese aufgerufen werden erhalten, nachdem das Cookie die jstree geklickt Klasse gesetzt hat?

War es hilfreich?

Lösung 2

Nach vielen googeln, fand ich endlich die Antwort. Wenn die Cookie-Option verwendet wird, muss man diese verwenden, anstatt an dem bind Teil des jquery:

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

Dann wird der Rückruf nicht Auslöser erst nach dem Cookie das ausgewählte Element gesetzt hat, und es funktioniert.

Andere Tipps

Es ist nichts mit der Einstellung des Wertes zu tun, sondern den Wert aus dem .jstree-clicked Attribute erhalten.

Versuchen Sie diesen Code verwenden, um zu sehen, ob das Element vorhanden ist:

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

Wenn es gibt etwas anderes als> = 1 Sie wissen, dass das Element nicht existiert.

Auch wenn Sie mehr als ein Element haben, kehrt das .attr() Methode das gewünschte Attribut für das Element Premieren bekannt, so vielleicht Ihre .jstree-clicked Klasse existiert anderswo ohne rel Attribut.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top