【问题标题】:Getting value from input control using jQuery使用 jQuery 从输入控件中获取值
【发布时间】:2011-07-05 13:18:10
【问题描述】:

我正在使用 Teleriks 树视图控件(asp.net mvc 扩展),其中我可能有多达三个子节点,就像这样(鼓声......下面的很棒的图表):

它有自己的格式,看起来有点像这样:

<%= 
    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。但是当用户点击一个节点时,我想发送 ID 而不是节点文本属性。这意味着我必须将其从这些类型行 &lt;input class="t-input" name="itemValue" type="hidden" value="1453" /&gt; 中的值中取出,但它每次嵌套的方式都不同,因此我使用的现有代码并不总是有效:

<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 获取适当 id 的更好方法是什么?

编辑

很抱歉澄清一些事情

1) 是的,我正在处理对树的lis 的点击,并希望找到嵌套隐藏输入字段的值。如您所见,从 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强>

【问题讨论】:

  • 我很难理解您到底想要返回什么。您说您想要适当的 ID,但您希望返回的具体 ID 是什么。
  • 我在my answer below 中编辑了您后续问题的解决方案。

标签: javascript jquery json model-view-controller dom


【解决方案1】:

有点不清楚你在问什么,但根据你的 JavaScript 的 sn-p,我猜你正在处理对树的 lis 的点击并希望找到 value嵌套隐藏字段?如果是这样,你想要这样的东西:

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

编辑:在回答您的后续问题时,您应该能够通过以下方式获得树深度:

var depth = $(e.item).parents(".t-item").length;

【讨论】:

    【解决方案2】:
    $('.t-input').live('change',function(){
       var ID_in_question=$(this).val();
    });
    

    【讨论】:

      【解决方案3】:

      在 jQuery 中,您可以使用 .val(); 返回任何表单元素值

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

      我不确定您为什么使用相同的隐藏输入字段名称“itemValue”,但如果您可以更清楚地说明您要问的内容,我相信这并不太难。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-09
        • 1970-01-01
        • 1970-01-01
        • 2018-05-25
        相关资源
        最近更新 更多