2013-08-15 3 views
1

좋아요. 저는이 문제에 조금 어려움을 겪었습니다. 나는 여전히 JQuery를 배우고있다.JQuery 특정 li 요소 선택

스크립트 :

$('ul li.error').animate({ 
    height: 'toggle', 
    opacity: 'toggle' 
    }, { 
    duration: 500, 
    specialEasing: { 
    width: 'linear', 
    height: 'easeInOutCubic' 
    }, 
    complete: function() { 

    $(this).each(function(){ 

     $(this).delay(4000); 

     $(this).animate({ 
      height: 'toggle', 
      opacity: 'toggle' 
     }, { 
      duration: 7000, 
      specialEasing: { 
      width: 'linear', 
      height: 'easeInOutCubic' 
     }, 
     complete: function(){ 
      $(this).delay(1000); 
       $(this).parent().next().find('li input').css('border-color', 'red'); 
       $('#somediv').slideDown(); 
      } 

     }); 

    }); 

    } 
}); 

html로 : 여기

내가 가진 무엇

<div> 
    <ul> 
<li class="error">(Error Message if any)</li> 
<li class="label"><label></li> 
<li class="input"><input></li> 

<li class="error">(Error Message if any)</li> 
<li class="label"><label></li> 
<li class="input"><input></li> 
    </ul> 
</div> 

난 할 노력하고있어하면 입력을 가지는 리튬 요소를 선택이다 테두리 색을 변경하십시오. 하지만 오류 메시지가있는 곳의 테두리 색상 만 변경하고 싶습니다.

어떻게하면됩니까? 어떤 도움을 주시면 감사하겠습니다.

+1

어떻게 우리는 입력이'error' 클래스가 아닌 다른 리튬에 "속한다"고 알 수 있습니까? 전혀 관련이 없다. –

+0

'li.error'는 항상 디폴트로 사용 가능합니까? – maxinacube

+0

php에서 매번 이렇게 생성됩니다. 'echo'

  • '. form_error ('last_name ').'
  • '; 오류가 없으면 목록 요소가 내용이없는 페이지에 계속 표시됩니다. 나는 $ ('li.error')를 사용한다. hide(); 하지만 나는 또한 그렇게 ul li.error처럼 CSS에 숨겨진 설정했습니다. \t 표시 : 없음; \t 배경 : # 005580; \t 색상 : #FFF; \t border-radius : 3px 3px; \t 너비 : 100 %; \t 패딩 : 0; \t 여백 : 0; } – jphreak

    답변

    1

    저는 방금 만든 예입니다.하지만 이와 같은 요소를 선택하는 것은 좋지 않습니다.

    $('.error').each(function(){ 
        var next = $(this).next(); 
        for(var i = 0; i < 5; i++) { 
         if(next.hasClass('input') === false) { 
          next = next.next(); 
         } else { 
          next.css('border', '1px solid red'); 
          break; 
         } 
        } 
    }); 
    

    데모 : 그것은 .error의 다음 요소를 순환하고 5 개 시도 내에서 발견되지 않은 경우 .input를 찾습니다 http://jsfiddle.net/2rdrr/

    , 그것은 포기합니다. 요소를 찾으면 테두리를 추가하고 루프를 깨뜨려 계속 보이지 않습니다.

    참고 : 이것은 매우 똑똑하지 않습니다. 페이지를 제어 할 수 있으므로 요소를 찾아야하는 대신 요소의 위치를 ​​알아야합니다.

    이렇게하는 더 좋은 방법은 다음과 같습니다.

    <div> 
        <ul> 
         <li class="error">(Error Message if any)</li> 
         <li class="label"><label></li> 
         <li class="input"><input></li> 
        </ul> 
        <ul> 
         <li class="error">(Error Message if any)</li> 
         <li class="label"><label></li> 
         <li class="input"><input></li> 
        </ul> 
    </div> 
    

    그런 다음이 작업을 수행 할 수 있습니다.

    $('.error').parent().find('.input').css('border', 'red'); 
    
    +0

    일반적으로 수행하려는 작업을 수행하기 위해 페이지를 설정하는 방법은 무엇입니까? 내가 정말로 원했던 것은 오류가있는 입력을 강조 표시하는 것뿐만 아니라 메시지를 표시하고 사라지도록하는 것입니다. 확인할 수있는 PHP에서 추가 값을 반환해야합니까? – jphreak

    +0

    답변이 업데이트되었습니다. – iConnor