2012-03-16 15 views
-3

아무도이 IF 문이 작동하지 않는 이유를 말해 줄 수 있습니까? jQuery와 Firebug를 사용하고 있지만 후자는 유용한 정보를 제공하지 않습니다.IF 문에 대한 올바른 구문

모든 필드가 완료되고 스크립트가 2 초마다 실행되어 입력을 확인하면 "제출"버튼이 표시됩니다.

내 코드 발췌 조금 이렇게되면 : 사람들이 내가 '생각하는 경우

function checkForm(){ 
    var userName = $('#name').val(); 
    var userContent = $('#content').val(); 
    var userEmail = $('#email').val(); 

    // The following line shows me that the values for the fields are all getting picked up properly 
    $('#report').html("userName: "+userName+"<br />userContent: "+userContent+"<br />userEmail: "+userEmail); 

    // But the following line is throwing some kind of error 
    if (userName == "" || userContent == "" || userEmail == ""){ 
     $('#update').slideDown(); 
    } else { 
     $('#update').slideUp(); 
    } 
} 

$(document).ready(function(){ 

    $('#update').hide(); 
    setInterval('checkForm()' , 2000); 

}); 

그리고 내 HTML ...

<div id="report"></div> 
<form id="submitfact"> 
    <div id="update">Update Database</div> 
    <label><input id="name" name="name" type="text" value="" /><span>Fact submitter's name</span></label> 
    <label><input id="email" name="email" type="text" value="" /><span>Fact submitter e-mail address</span></label> 
    <label class="content"><span>Fact text</span><br /><textarea id="content" name="content"></textarea></label> 
</form> 

편집 ...

내가 사과 오류 메시지를 제공하지 않음으로써 시간 낭비 - 그러나 방화범이 끌리는 것은 아무 것도 유용하지 않습니다. 만약 내가 여기에 게시했다면. 필자는 합리적으로 숙련 된 PHP 프로그래머이지만 jQuery에 익숙하지 않으므로 언어를 작성하고 디버깅하는 데 여전히 익숙합니다. 방화범이 끌리는 스크린 샷을 게시하고 싶지만 새 사용자로서 허용되지 않습니다 ... 줄 번호 열에 "빨간색 오류 원형/노란색 재생 삼각형"아이콘이 나타납니다 ("스크립트 "탭) 위에서 언급 한 줄에 ..."스크립트 "및"콘솔 "패널 이외의 다른 위치를 말할 수 없다면 다른 것이 없습니다.

또 다른 편집 ...

글쎄, 나는 그것을 Cristoph의 제안을 살펴 복용에 의해 고정되었다. 기본적으로 같은 솔루션이지만 함수로 호출하는 대신 "인라인"으로 지정합니다. 나는 두 기술의 차이점이 무엇인지 전혀 모르겠어요 또는 단순히 내가 가진 한 지역의 문제입니다하지만 내 새로운 jQuery를이 모양 여부 : 내가 볼 다른 의견을 통해보고해야합니다

$(document).ready(function(){ 
    $('#submitfact').keyup(function(){ 
     var userName = $('#name').val(); 
     var userContent = $('#content').val(); 
     var userEmail = $('#email').val(); 

     $('#report').html(userName + "<br />" + userContent + "<br />" + userEmail); 

     if (userName == "" || userContent == "" || userEmail == ""){ 
      $('#update').slideUp(); 
     } else { 
      $('#update').slideDown(); 
     } 
    }); 
}); 

만약 내가 그것을 능률화 할 수 있지만 최소한 나는 현재 작업 기준선을 가지고있다! 덕분에 당신의 시간, 모두가

+2

그들은 실제로 빈 문자열, 또는'null'입니까? 또한 타이머가 아닌 입력이 수정되면이 검사를 수행하게됩니다. –

+0

라인에서 오류가 발생하는 경우 오류를 게시하는 것이 좋지 않다고 생각하십니까? 또한 Moo-Juice가 맞습니다. 왜 타이머로 이러는 거니?! – anothershrubery

+0

** ** 오류 란 무엇입니까? – gdoron

답변

1

첫째는, 정말 오류를 던지고, 또는 작업 간단하지? 난 당신의 코드를 이해하는 방법에서

, 당신의 상태가 할 필요가있는 경우 :

if (!userName === "" && !userContent === "" && !userEmail === ""){ 
    // show 
    $('#update').slideDown(); 
} else { 
    // hide 
    $('#update').slideUp(); 
} 

둘째 : 타이머와 함께이 일을하는 것은 잘못된 생각이다. 값 입력이 변경되면 확인하는 이벤트 핸들러를 소개

훨씬 더 :

$("input").change(function(){ 

    // if all inputs are filled, show Button, else hide it 

}); 

P.S. Javascript에 대한 통찰력 : 빈 문자열은 "거짓"으로 간주되므로 username === ""!username으로 작성 될 수 있습니다. 그러나 undefined, null, false, 0NaN도 "위조 된"것으로 간주됩니다. 이것은 당신이 그들을 구별 할 수 없다는 것을 의미합니다.이런 이유로 나는 선호한다 username === "" (note the === !)

+0

Thanks Christoph - 귀하의 논리와 일치하도록 코드를 변경하기 만하면 첫 번째 인스턴스는 아무런 차이가 없지만 두 번째 제안은 내 트릭처럼 코드를 다시 작성합니다. 그에 따라 원래 게시물을 수정했습니다. 감사! :) – Doug

+0

이제 올바르게 작동합니까? – Christoph

+0

그것은 - 작동 스크립트를 보여주기 위해 필자의 원래 게시물을 편집했습니다 ... 무엇이 차이를 만들어 냈는지 확실하지 않습니다. TBH - jQuery에서 더 잘 이해하면 잘 알 수 있습니다 :) – Doug

1

이에 평가를 변경해보십시오 :) : 모든

if (!userName || !userContent || !userEmail){ 
    $('#update').slideDown(); 
} else { 
    $('#update').slideUp(); 
} 
+0

약간의 수학으로 더 간단하게 할 수 있습니다.'if (! (userName && userContent && userEmail)) {' – Blazemonger