2010-08-18 5 views
1

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

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

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

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

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

EDIT:

Как отмечалось, элемент с классом jstree щелкнул не существует, когда называют это утверждение. И, как я уже говорил ниже, я предполагаю, что он должен войти в качестве обратного вызова. Но я не знаю, где (попробовал несколько мест, но никто из них не работает).

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

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

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

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

EDIT 2:

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

+0

, пожалуйста, сообщите нам свой html-код, содержащий задействованные элементы. – jigfox

+0

+1, пожалуйста, код –

+0

Код, который у вас работает, отлично подходит для меня, проблема должна быть в другом месте. http://jsfiddle.net/e66kQ/ –

ответ

0

После много прибегая к помощи, я, наконец, нашел ответ. Если используется опция печенья нужно использовать это вместо того, чтобы на связывания части JQuery:

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

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

2

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

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

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

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

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

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

+0

Вы правы, спасибо! Когда этот оператор вызывается, нет элемента с этим классом. Предположительно из-за того, что сам html создается плагином JsTree. Я предполагаю, что мне нужно вставить оператор в качестве обратного вызова для функции JsTree, но, будучи настолько новым для jQuery, я смущен относительно того, куда это должно идти. Я обновлю свой вопрос еще одним кодом и надеюсь на помощь в том, где это сделать! – Anders

+0

Хорошо, но помните, что если привязка события к элементу (например, щелчок, изменение и т. Д.), Вам придется использовать специальные методы, чтобы привязка все еще работала после того, как код был динамически создан, но с селекторами, которых у вас нет. Если вы используете firebug с firefow, вы сможете увидеть HTML (дерево DOM), поскольку он изменяется jQuery. –

+0

Хорошо, я не уверен, что следую :-) Я просто разместил полный код, пожалуйста, взгляните на него и покажите мне, что мне нужно сделать ... Спасибо! – Anders

Смежные вопросы