2012-03-16 2 views
-3

Может ли кто-нибудь сказать мне, почему этот оператор IF не работает, пожалуйста? Я использую jQuery и Firebug, но последнее не дает мне никакой полезной информации.Правильный синтаксис для оператора IF

Я просто пытаюсь открыть кнопку «отправить», когда все поля были заполнены, и скрипт запускается каждые пару секунд, чтобы проверить ввод.

Мой фрагмент кода идет немного как это:

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> 

Edit ...

Я прошу прощения, если люди думают, что я м тратить свое время, не предоставляя сообщение об ошибке - но Firebug просто не дает мне ничего полезного - если бы это было, я бы разместил его здесь. Я довольно опытный программист php, но довольно новичок в jQuery, поэтому я признаю, что до сих пор понимаю, как писать язык, так и отлаживать его. Я бы хотел опубликовать скриншот ответа Firebug, но, как новый пользователь, мне не разрешено ... все, что я получаю, это значок «красный треугольник ошибки/желтый треугольник» в столбце номеров строк («script ") в строке, показанной выше ... ничего больше, если вы не скажете мне, где еще искать другие, кроме панелей« скрипт »и« консоль »?

Другой редактировать ...

Ну, я получил это фиксируется взглянуть на предложение 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(); 
} 

Во-вторых, делать это с помощью таймера является плохой идеей.

Вводя EventHandler, чтобы проверить как только InputValue изменился гораздо лучше:

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

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

}); 

P.S. Продвинутое понимание Javascript: пустая строка считается «ложной», поэтому username === "" может быть написана как !username. Обратите внимание, однако, что undefined, null, false, 0 и NaN также считаются «фальшивыми»! Это означает, что вы не можете их отличить.По этой причине я предпочитаю 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

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