2013-10-13 5 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> 

Я пытаюсь сделать так, что если пользователи нажимают ввести, когда они фокусируются на входе, событие 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

Вы могли бы просто сделать ключ ввода функцией, так как кнопка delete вместо этого привязывает функцию. Итак, скажите, что вы нажимаете событие, чтобы .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 
    } 
}); 

--edit-- попробовать это, чтобы получить правильный элемент ...

$('.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'. Я не ожидал, что этот элемент будет «этим», и теперь это означает, что я не знаю, какой вход был сфокусирован при нажатии клавиши ввода ... –

+0

обновили для вас –

+0

Спасибо, но ваше редактирование никогда не могло работать. Элемент DOM-слева DOM (может быть многочисленным с этим классом) динамически добавляется через jQuery, поэтому не существует, когда создается связка. –

Смежные вопросы