2011-02-18 2 views
0

그래서 jQuery와 함께 작동하여 체크하지 않거나 체크하지 않는 약간의 가짜 체크 박스가 있습니다. 이 내 문서에 가짜 체크 박스의 숫자가 있으며, 각각에 대해 내가 클릭 기능이 있습니다jQuery (x == y)가 작동하지 않는 경우

var productInterest = []; 
productInterest[0] = false; 
productInterest[1] = false; 
productInterest[2] = false; 

// here is one function of the three: 

$('#productOne').click(function() { 
    if (productInterest[0] == false) { 
     $(this).addClass("checkboxChecked"); 
     productInterest[0] = true; 
    } else { 
     $(this).removeClass("checkboxChecked"); 
     productInterest[0] = false; 
    } 
}); 
문제가 확인되므로 if 문에서 에러가 발생했을 것 같다

있지만 선택을 취소하십시오. 즉, 클래스를 추가하지만 변수는 변경되지 않으므로 여전히 해당 변수가 검사됩니다. 아무도 아이디어가 없나요? 당신의 도움을 주셔서 감사합니다.

업데이트 : 그래서 내가 제공 한 방식으로 작동하므로 내 코드를 모두 보여줄 필요가 있습니다. 대지. 아래에서 코드 전체를 찾으십시오.

각 확인란의 UI와 데이터를 한 번에 업데이트해야하므로 모든 기능이 하나의 기능으로 이루어져야합니다.

$('input[name=silkInterest]').click(function() { // they all have the same name 

    var silkInterest = []; 
    silkInterest[0] = false; 
    silkInterest[1] = false; 
    silkInterest[2] = false; 

    if ($(this).is('#silkSilk')) { // function stops working because the .is() 
     if (silkInterest[0] == false) { 
      $(this).addClass("checkboxChecked"); 
      silkInterest[0] = true; 
     } else { 
      $(this).removeClass("checkboxChecked"); 
      silkInterest[0] = false; 
     } 
     alert(silkInterest[0]); 
    } 
    if ($(this).is('#silkAlmond')) { 
     if (silkInterest[1] == false) { 
      $(this).addClass("checkboxChecked"); 
      silkInterest[1] = true; 
     } else { 
      $(this).removeClass("checkboxChecked"); 
      silkInterest[1] = false; 
     } 
    } 
    if ($(this).is('#silkCoconut')) { 
     if (silkInterest[2] == false) { 
      $(this).addClass("checkboxChecked"); 
      silkInterest[2] = true; 
     } else { 
      $(this).removeClass("checkboxChecked"); 
      silkInterest[2] = false; 
     } 
    } 

    var silkInterestString = silkInterest.toString(); 
    $('input[name=silkInterestAnswer]').val(silkInterestString); 
    // This last bit puts the code into a hidden field so I can capture it with php. 

}); 
+0

코드가 제대로 작동합니다. (실제로 붙여 넣기를 3 번 ​​복사하는 대신 루프를 사용해야 함) – david

+0

click 이벤트가 발생한 후 값이 실제로 변경되었는지 여부를 알리십시오. – JohnP

+0

코드를 복사하여 붙여 넣었습니다. 정상적으로 작동했습니다. 아마도 페이지의 다른 코드가 잘못된 것입니까? –

답변

0

좋아, 그냥 이마에 손바닥이 있었어. 수정 된 코드와 관련하여 클릭 할 때마다 변수가 재설정됩니다. 그것이 문제였습니다. 이봐.

3

내가 코드에서 문제를 발견 할 수는 없지만 당신은 단순히 당신이 productInterest 배열 대신에 추가하는 클래스를 사용할 수 있습니다 : 그래서 여기에 전체 기능입니다.

if ($('#productOne').hasClass('checkboxChecked')) {...} 

이 UI를 항상 "데이터"에 동기화되어 있는지 확인합니다 :

// Condense productOne, productTwo, etc... 
$('[id^="product"]').click(function() { 
    // Condense addClass, removeClass 
    $(this).toggleClass('checkboxChecked'); 
}); 

을 그리고 그들 중 하나가 선택되어 있는지 확인하는 : 이것은 하나의 아래 코드를 응축 할 수 있습니다 따라서 다른 코드가 간섭하는 경우이를 감지 할 수 있습니다.

+0

그 솔루션은 훌륭하게 작동하지만, 데이터와 동기화 된 UI를 유지하는 것이 중요합니다. 결과적으로 모든 기능이 하나의 기능에 포함되어 있어야 확인란을 선택하면 UI와 데이터가 동시에 업데이트됩니다. 위의 주석 자들은 코드가 내가 질문에 제공 한 방식대로 작동한다는 점을 지적했습니다. 하지만 막대한 코드 블록을 피하기 위해 코드를 바꾸려고했습니다. 위의 코드는 각 함수 앞에 if (x) .is (y)를 사용하면 작동을 멈 춥니 다. – inorganik

+0

맨 위로 내 업데이트 된 질문을 참조하십시오 ... 도움 주셔서 감사합니다 Box9. – inorganik

+0

@inorganik, #은 ID 용이지만 이름은 있습니다. 대신에 "[name = silkSilk]"'를 사용하십시오. –

관련 문제