Получение значения из управления вводом с помощью jQuery - PullRequest
0 голосов
/ 28 февраля 2011

Я использую элемент управления teleriks treeview (расширения asp.net mvc), где у меня может быть до трех дочерних узлов, вот так (drumroll ...... классная диаграмма ниже):

http://i53.tinypic.com/htu1oy.png

имеет свое собственное форматирование, похожее на это:

<%= 
    Html.Telerik().TreeView()
        .Name("TreeView")
        .BindTo(Model, mappings =>
                           {
                               mappings.For<Node1>(binding => binding
                                                                     .ItemDataBound((item, Node1) =>
                                                                                        {
                                                                                            item.Text = Node1.Property1;
                                                                                            item.Value = Node1.ID.ToString();
                                                                                        })
                                                                     .Children(Node1 => Node1.AssocProperty));

                               mappings.For<Node2>(binding => binding
                                                                         .ItemDataBound((item, Node2) =>
                                                                                            {
                                                                                                item.Text = Node2.Property1;
                                                                                                item.Value = Node2.ID.ToString();
                                                                                            })
                                                                         .Children(Node2 => Node2.AssocProperty));

                               mappings.For<Node3>(binding => binding
                                                                  .ItemDataBound((item, Node3) =>
                                                                                     {
                                                                                         item.Text = Node3.Property1;
                                                                                         item.Value = Node3.ID.ToString();
                                                                                     }));
                           })
 %> 

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

<li class="t-item">
<div class="t-mid">
    <span class="t-icon t-plus"></span>
    <span class="t-in">Node 1</span>
    <input class="t-input" name="itemValue" type="hidden" value="6" /></div>

        <ul class="t-group" style="display:none">
            <li class="t-item t-last">
                <div class="t-top t-bot">
                    <span class="t-icon t-plus"></span>
                    <span class="t-in">Node 1.1</span>
                    <input class="t-input" name="itemValue" type="hidden" value="207" />
                </div>

                    <ul class="t-group" style="display:none">
                        <li class="t-item">
                            <div class="t-top">
                                <span class="t-in">Node 1.1.1</span>
                                <input class="t-input" name="itemValue" type="hidden" value="1452" />
                            </div>
                        </li>

                        <li class="t-item t-last">
                            <div class="t-bot">
                                <span class="t-in">Node 1.1.2</span>
                                <input class="t-input" name="itemValue" type="hidden" value="1453" />
                            </div>
                        </li>
                    </ul>
            </li>
        </ul>

Я занимаюсь обновлением div после того, как пользователь нажимает на определенный узел.Но когда пользователь нажимает на узел, я хочу отправить идентификатор, а не текстовое свойство узла.Это означает, что я должен вывести его из значения в этих строках типа <input class="t-input" name="itemValue" type="hidden" value="1453" />, но он может каждый раз по-разному вкладываться, поэтому существующий код, который я всегда ВСЕГДА не работает:

<script type="text/javascript">

    function TreeView_onSelect(e) {
    //`this` is the DOM element of the treeview
        var treeview = $(this).data('tTreeView');

        var nodeElement = e.item;
    var id = e.item.children[0].children[2].value;


...

</script>

Итакисходя из этого, как лучше каждый раз получать соответствующий идентификатор с помощью javascript / jquery?

edit :

Извините, чтобы прояснить некоторые вещи

1) Да, я обрабатываю клики на li дерева и хочу найти значение вложенного скрытого поля ввода.Как вы можете видеть, из кода telerik установка item.Value = Node2.ID.ToString(); вызвала его рендеринг в скрытом поле ввода.

Я отвечаю на щелчки в любом месте дерева, поэтому я не могу использовать свой существующий код, который полагалсяв отношении набора (это будет работать для первых узлов (Узел 1), а не для чего-либо, вложенного ниже)

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

<li class="t-item t-last">
                            <div class="t-bot">
                                <span class="t-in">Node 1.1.2</span>
                                <input class="t-input" name="itemValue" type="hidden" value="1453" />
                            </div>
                        </li>

Я хочу, чтобы значение ID отсутствовало на входе, в данном случае 1453.

Надеюсь, теперь это имеет гораздо больший смысл.

, если это возможноХотелось бы расширить это, чтобы также хранить в переменной, как вложенный элемент, по которому щелкают, то есть, если щелкнуть узел 1.1.2, возвращает 2, узел 1.1 возвращает 1, а узел 1 возвращает 0

Ответы [ 3 ]

3 голосов
/ 01 марта 2011

Немного неясно, что вы спрашиваете, но, основываясь на вашем фрагменте JavaScript, я предполагаю, что вы обрабатываете клики на li дерева и хотите найти value в вложенное скрытое поле? Если это так, вы хотите что-то вроде этого:

function TreeView_onSelect(e) {
    var id = $(e.item).find(".t-input:first").val();
}

Редактировать : Отвечая на ваш дополнительный вопрос, вы сможете получить глубину дерева следующим образом:

var depth = $(e.item).parents(".t-item").length;
1 голос
/ 01 марта 2011

В jQuery вы можете вернуть любое значение элемента формы, используя .val ();

$(this).val(); // would return value of the 'this' element.

Я не уверен, почему вы используете то же имя скрытого поля ввода "itemValue", но если вы можетедать немного больше ясности в том, что вы спрашиваете, я уверен, что это не так уж сложно.

0 голосов
/ 01 марта 2011
$('.t-input').live('change',function(){
   var ID_in_question=$(this).val();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...