请帮助解决这个小提琴中的代码。我想要实现的是从最接近删除按钮的字段中获取输入值。 :
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>
答案 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
标识的ol
或selector for the list
元素是&n删除/重新创建。 (如果是,只需将点击进一步勾出。)