【问题标题】:find value of nearest input field查找最近输入字段的值
【发布时间】:2014-12-11 11:14:37
【问题描述】:

请帮助解决这个小提琴中的代码。我想要实现的是从最接近删除按钮的字段中获取输入值。 :

http://jsfiddle.net/w9g3e8mb/11/

 function deleteTheCtrl() {
   var ctrl_name = $(this).parent().find("div").first().find("input").first().val();
   alert("Control Name :: " + ctrl_name);     
 }

HTML 如下:

 <ul>
 <li style="height: 200px; width:300px !important;margin-left: 30px;overflow: visible;">
    <label for="control_name">Control Name:</label>
    <div class="ui-input-text ui-body-inherit ui-corner-all ui-shadow-inset">
        <input name="control_name" id="control_name" value="Fan" type="text"/>
    </div>
    <button type="button" onclick="deleteTheCtrl()" data-ajax="false" class="ui-btn ui-shadow ui-corner-all ui-icon-delete ui-btn-icon-notext deleteCtrlLink" title="Delete Control" value="Delete Control" height="30px">Get Name</button>
 </li>
 </ul>

【问题讨论】:

    标签: jquery mobile jquery-traversing


    【解决方案1】:

    如果li 中只有一个input,那么:

    var ctrl_name = $(this).closest('li').find('input').val();
    

    ...但你的也可以。真正的问题是 this 不是您所期望的那样。

    要修复它,请将this 传递给deleteTheCtrl

    onclick="deleteTheCtrl(this)"
    

    ...然后使用该参数:

    function deleteTheCtrl(btn) {
        var ctrl_name = $(btn).closest('li').find('input').val();
        // Or your: var ctrl_name = $(btn).parent().find("div").first().find("input").first().val();
    }
    

    但更好的是完全不使用onclick 属性。相反,处理列表中的click

    $("selector for the list").on("click", "button.deleteCtrlLink", function() {
        var ctrl_name = $(this).closest('li').find('input').val();
        // Or your: var ctrl_name = $(this).parent().find("div").first().find("input").first().val();
    });
    

    因为这是一个委托处理程序,所以即使您添加和删除列表项,它也可以工作,前提是您使用 selector for the list 标识的 ulol 元素未被删除/重新创建。 (如果是,只需将点击挂钩。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-19
      • 2013-03-29
      • 1970-01-01
      • 2012-11-14
      • 2017-01-23
      • 2013-03-01
      • 2020-11-05
      相关资源
      最近更新 更多