2013-10-13 46 views
0

我有一个jQuery对话框,允许用户添加和删除选项(使用jQuery来更新DOM)。每次选项被添加,输入和一个按钮(“删除”)添加到对话框中的格式如下 -查找previoius元素与某个类

<div id="existing-options"> 
    <div class="dialog-option"> 
     <div class="dialog-right"> 
      <div class="remove_option button-secondary" id="remove_new_0">Delete</div> 
     </div> 
     <div class="dialog-left"> 
      <input type="text" value="1" class="option text ui-widget-content ui-corner-all" id="new_0" name="new_0"> 
     </div> 
    </div> 
</div> 

我试图让这个如果用户按下回车时,他们都集中在一个输入上,其相应的'Delete'按钮的click事件被触发。

我已经做了一些研究,.sibling()似乎不合适。 .prev()看起来像我最好的选择,但那是行不通的。有人可以告诉我最好的方法来实现这个工作吗?

$(document).ready(function(){ 

    dialog_options_container = $('#existing-options'); // The container which holds the option inputs/buttons 

    /** Capture the 'enter' key when removing an option */ 
    dialog_options_container.bind('keyup', '.option', function(e){ 
     if(e.keyCode === 13){ 
     $(this).prev('.remove_option').click(); 
     return false; // Ignore the default event 
     } 
    }); 

}); 
+0

在你的JavaScript里是什么意思't.dialog_options_container'? – Epsil0neR

+0

您可以简单地使回车键具有一个功能,就像删除按钮具有绑定功能一样。所以说你点击的事件是.remove()父母只要做(如果这样)(e.which === 13){$(this).parent()。remove(); }只是一个小例子,因为我在我的手机上哈哈。 – EasyBB

+0

@ Epsil0Ner - 我已经更新了这个问题来证明这一点。 –

回答

1

试试这个:

t.dialog_options_container = $('#existing-options'); 
t.dialog_options_container.on('keyup', '.option', function(e){ 
    if(e.keyCode === 13) $(this).closest('.dialog-option').find('.remove_option').click(); 
    return false; 
}); 

它使用.closest()来选择.dialog-option然后.find()来搜索.remove_option

+0

谢谢,但这不起作用。选择器'.option'是使用jQuery动态添加的,因此不存在就绪。 –

+0

@DavidGard - 我刚刚更新了它,所以它应该现在工作正常。 – Joe

+0

完美,完全可以做到这一点。谢谢你的帮助 :) –

1

你可以尝试通过id靶向按钮具体为(每一个新的部分假设在你的榜样增量0):

t.dialog_options_container.bind('keyup', '.option', function(e){ 
    if(e.keyCode === 13){ 
     var button_id = $(this).attr('id'); 
     $('#remove_' + button_id).trigger('click'); 
     return false; // Ignore the default event 
    } 
}); 

- 编辑 -试试这个来得到正确的元素...

$('.dialog-left input[type="text"]').bind('keyup', function(e){ 
    if(e.keyCode === 13){ 
     var button_id = $(this).attr('id'); 
     $('#remove_' + button_id).trigger('click'); 
     return false; // Ignore the default event 
    } 
}); 
+0

谢谢,但那不行。当我点击时,我输出'button_id'的值,它告诉我它是'existing-options',它实际上是由't.dialog_options_container'引用的父容器的ID。我并不期待这个元素是'this',现在它意味着我不知道当输入键被按下时哪个输入被聚焦... –

+0

已经更新为你 –

+0

谢谢,但是你的编辑无法工作。 '.dialog-left' DOM元素(可以用这个类很多)通过jQuery动态添加,所以在创建绑定时不存在。 –