JQuery, чтобы установить значение скрытого поля? - PullRequest
1 голос
/ 18 августа 2010

Я хочу иметь возможность установить значение скрытого поля равным значению атрибута rel в ссылке:

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

Но это не работает.Однако это более простое выражение прекрасно работает:

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

Это устанавливает скрытое поле с id = currentDir в значение "TEST".Но почему не работает другое выражение?

EDIT:

Как уже указывалось, элемент с классом 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 при нажатии.Но так как будут и обратные вызовы, я перезагружаю страницу с помощью плагина cookie, который устанавливает JsTree таким же, как и раньше, с нажатием jstree, указывающим выбранную папку.Таким образом, функция click работает нормально и устанавливает currentDir, но после обратной передачи мне нужно перейти к другому обратному вызову (я полагаю, с помощью оператора, о котором я изначально спрашивал здесь, т.е. после того, как дерево было создано.)

Я не думаю, что действительно есть смысл публиковать html-источник здесь, как просили несколько человек, у него есть класс и все, но я приведу его точно так же из Firebug:

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

Проблемакажется, что у него еще нет этого при вызове функции.Итак, еще раз, любая помощь с получением утверждения в нужном месте (обратный вызов?) Приветствуется!

РЕДАКТИРОВАТЬ 2:

Хорошо, поэтому я получил обратный вызов, который фактически запускается после того, как деревозагружен (см. дополнение в разделе .bind выше с комментарием).Но похоже, что даже если дерево загружено (подтверждается окном предупреждения, показывающим количество элементов), плагин cookie, похоже, не был запущен, поэтому утверждение, которое я ищу, все еще бесполезно.Утверждение, которое я вставил сейчас, является предложенным в одном из ответов, чтобы проверить, существует ли элемент, щелкнувший по нажатию jstree, и все еще нет.Таким образом, кто-нибудь знает, как я могу вызвать это после того, как cookie установил класс jstree-clicked?

Ответы [ 2 ]

2 голосов
/ 18 августа 2010

Это не имеет ничего общего с установкой значения, а с получением значения из атрибута .jstree-clicked.

Попробуйте использовать этот код, чтобы увидеть, существует ли элемент:

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

Если он возвращает что-либо кроме> = 1, вы знаете, что элемент не существует.

Даже если у вас более одного элемента, метод .attr() вернет нужный атрибут для первого известного элемента, поэтому, возможно, ваш класс .jstree-clicked существует в другом месте без атрибута rel.

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

0 голосов
/ 20 августа 2010

После долгих поисков я наконец нашел ответ. Если используется опция cookie, нужно использовать ее вместо части связывания jquery:

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

Тогда обратный вызов не срабатывает до тех пор, пока cookie не установит выбранный элемент, и он работает.

...