找到最近输入字段的值

时间:2014-10-16 07:22:14

标签: jquery mobile jquery-traversing

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

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>

1 个答案:

答案 0 :(得分:3)

如果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();
});

因为这是一个委派的处理程序,即使您添加和删除列表项,它也会有效,前提是您使用ul标识的olselector for the list元素是&n删除/重新创建。 (如果是,只需将点击进一步勾出。)