2013-07-27 3 views
0

Я очень новичок в изучении Javascript и JQuery.Можете ли вы запустить инструкцию JS if и цикл внутри строки JQuery?

На веб-сайте, который я создаю, я пытаюсь вставить Javascript if и цикл for в строке JQuery. Последнее подтверждение не выполняется. Я подозреваю, что это утверждение if вызывает эту проблему. Как я могу это исправить? Вот как выглядит мой код.

$(document).ready(function() { 
    $(".button3").click(function() { 
     var lastname = $('#lastnameresponse').val(); 
     confirm("You're last name is" + " " + lastname); 
     if (userResponse = "girl") { 
      for (var i = 0; i <= girlnames.length; i++) { 
       confirm("Your future daughter's name is" + " " + random + " " + randomagain + " " + lastname); 
      }) 
    }); 
+0

Это не похоже на полный код. Что такое 'userResponse'? – mohkhan

+1

'userResponse =" girl "' присваивает '' девушке '' '' userResponse'. Используйте '==' или '==='. Та же самая ошибка, которую вы ранее сделали: http://stackoverflow.com/a/17002680/139010 –

+1

У вас есть бродячая скобка после цикла for. – Austen

ответ

2

Там очень много что не имеют смысл с вашим кодом.

Во-первых, что такое userResponse? Где это определяется и где оно установлено? Вы проверили под отладчиком, что это действительно равным - «девушка»?

Во-вторых, вы, вероятно, имел в виду использовать сравнения равна не назначение равно здесь:

if (userResponse = "girl") { // This should be == 

Однако это не должно мешать блок бежать. Фактически, это заставит блок всегда бежать с тех пор, как «девушка» истинна.

В-третьих, что такое girlnames? Это массив? Где это определено? Вы подтвердили, что действительно содержат действительные элементы?

Наконец, я считаю, ваш for цикл неправилен:

for (var i = 0; i <= girlnames.length; i++) { 

Должно быть:

for (var i = 0; i < girlnames.length; i++) { 

Массивы начинаются с 0, таким образом girlnames[girlnames.length] не является допустимым элемент.

Однако, учитывая, что вы сделать не Используйте переменная i в цикле где-нибудь, опять-таки это не должно фактически причиной каких-либо ошибок.

Я бы шаг через код построчно с помощью отладчика сценариев (обычно F12 в современных браузерах) и установить точку останова на:

var lastname = $('#lastnameresponse').val(); 

Затем проверяется каждая строка правильно вести себя. Если это все еще не работает, вам нужно разместить больше своего кода, чтобы мы могли лучше понять, что происходит.

UPDATE:

Основываясь на ваш комментарий:

Вот где переменная userResponse определяется: $ (документ) .ready (функция() {$ ("# girlimg") .click (function() {var userResponse = prompt («Подтвердите выбранный пол»). toLowerCase; $ ('html, body'). animate ({scrollTop: $ (". LastName"). offset () .top}, 2000);

Кажется, что userResponse получает объявленная внутри обработчика щелчка для #girlimg тега:

$("#girlimg").click(function() { 
    // Everything declared here is local to this function 
    var userResponse = confirm(); // local variable 
}); 

Таким образом, он не будет доступен в обработчик щелчка для .button3. Вы должны объявить userResponse в области, доступной для обеих функций. Возможно, глобальный (это неодобрительно в JavaScript) или в вашем коде $(document).ready(), если в этом блоке определены оба обработчика событий кликов.

+0

Hi Mike, Это ошибка, которую я имею тенденцию делать. Однако я сделал это изменение и, к сожалению, код все еще не работает. Любые другие мысли? – user2466886

+0

Несомненно. Где определяется 'userResponse'? Вы подтвердили, что это действительно равно «девушке»? Где определяется «girlnames»? Является ли это массивом? Подтвердили ли вы, что имеет значение более одного значения для итерации? Пробовали ли вы отлаживать этот код с помощью отладчика сценариев? –

+0

girlnames является массивом, Вот где определяется переменная userResponse:. $ (документ) .ready (функция() { \t $ ("# girlimg") нажмите (функция() { \t вар userResponse = prompt («Подтвердить выбранный пол»). toLowerCase; $ ('html, body'). animate ({ scrollTop: $ (". LastName"). offset(). top }, 2000); – user2466886

0

После заявление не содержит собственного JavaScript Оператор сравнения

равна написано ==

if (userResponse = "girl") { 

для справки вид here

2

Во-первых: это Your не You're :)

Во-вторых, userResponse не определено. Может быть, он определен где-то в другом месте.

Для сравнения, используйте оператор ==.

Вы уверены, что это то, что вы хотите сделать? Я вижу, у вас также есть confirm. Используйте confirm, как это:

$(".button3").click(function() { 
    var lastname = $('#lastnameresponse').val(); 
    // confirm() returns true or false, depending on the clicked button 
    is_confirmed = confirm("You're last name is" + " " +lastname); 
    if (true == is_confirmed) { 
     for (var i = 0; i <= girlnames.length; i++) { 
      confirm ("Your future daughter's name is" + " " + random + " " + randomagain + " " + lastname); 
     } 
    } 
}); 

girlnames также не определено здесь (может быть, это где-то еще). То же самое для random и randomagain

Что касается написания JavaScript «in» jQuery: такого вопроса нет. jQuery - это библиотека, написанная на Javascript, которая предоставляет полезные функции для облегчения разработки.

+0

Я все еще немного смущен, как работает подтверждение. Ваше предложение действительно запустило код, но он не получил последнее подтверждение (после цикла for) для запуска. Все остальные переменные были определены ранее. – user2466886

+0

Последний 'confirm()' не работает, если 'girlnames' не определяется как массив с хотя бы одним элементом. Читайте о 'confirm' и массивах в javascript – ep0

0

Вы забыли закрыть некоторые стрелки, любой путь, когда вы кладете:

if (userResponse ="girl"){...} 

вы установите переменную userResponse на «девочка», и передает значение переменной только
проверить в userResponse является равно «девочка» вы должны поставить

if (userResponse =="girl") 

окончательный код будет выглядеть следующим образом

$(document).ready(function(){ 
$(".button3").click(function() { 
var lastname = $('#lastnameresponse').val(); 
confirm("You're last name is" + " " +lastname); 
if (userResponse ="girl") { 
    for (var i = 0; i <= girlnames.length; i++) { 
    confirm ("Your future daughter's name is" + " " + random + " " + randomagain + " " + lastname); 
    }}} 
) 
}); 

p.s: вы забыли закрыть слишком много стрелок

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