2013-02-08 2 views
0

У меня есть несколько форм на странице, каждая форма имеет свое собственное «поле сообщения», которое отображает ошибку проверки. Каждое «окно сообщения» имеет кнопку закрытия. У меня нет проблемы с закрытием кнопки «закрыть окно», но мне также нужно удалить класс «ошибка» из текстового ввода. Содержимое страницы вводится с помощью ajax, поэтому «.on»Обход DOM и удаление класса

Pseudo HTML (помните, что в любой момент из них все завернуты в свой собственный тег формы, в который входят окно сообщения и кнопка закрытия.

<form action="#" method="post" id="Form6"> 
    <ul> 
     <li> 
      <label for="foo">label</label> 
      <input type="text" name="foo" id="foo"> 
      <input type="submit" id="Button6" value="submit" /> 
     </li> 
    </ul> 
    <div id="Msg6" class="error"><a class="close">X</a><ul></ul></div> 
</form> 

Моя попытка

$('body').on('click', 'a.close', function(){ 
    $(this).parent().fadeOut("fast"); 
    $(this).closest('input[type="text"].error').removeClass('error'); // doesn't work 
    $('a.close').closest('ul > li > input.error').remove();// doesn't work 
    //console.log($.closest('input[type="text"].error'));//tring to log the value of the ancestor 
}); 

ответ

1

Это должно работать:

$(this).parents('form').find('input.error').removeClass('error'); 

Но если вы хотите чтобы удалить его, не нужно менять класс, просто используйте .remove() ...

+0

отлично. поэтому вы переходите DOM к родительской форме, затем найдите input.error и removeClass. Извлеченный урок сэр. Просто используя remove, чтобы получить базовую линию, нужно удалить класс. –

+0

Да, но вы можете использовать 'ближайший' вместо' родителей'. Я думаю, что это быстрее, потому что 'ближайшее()' будет перемещаться назад до тех пор, пока не будет найдено совпадение, в то время как 'parents()' соберут всех родителей, а затем ищем соответствие –