2010-01-06 2 views
2

У меня есть следующее, которое срабатывает при изменении флажка.Почему это, если/else не работает в jquery для меня?

$(document).ready(function() { 
    $("#reviewed").change(function(){ 
     if ($('#reviewed:checked').val() !== null) { 
      $.ajax({ 
       url: "cabinet_reviewed.php?reviewed=yes", 
       cache: false, 
       success: function(html){ 
        $("#reviewDate").replaceWith(html); 
       } 
      }); 
     } else { 
      $.ajax({ 
       url: "cabinet_reviewed.php?reviewed=no", 
       cache: false, 
       success: function(html){ 
        $("#reviewDate").replaceWith(html); 
       } 
      }); 
     } 
}); 
}) 

Это работает только один раз. Я хочу посмотреть, когда будет установлен флажок и какое значение оно будет изменено.

UPDATE: Я изменить код вокруг следующего (на основе замечаний у всех)

$(document).ready(function() { 
    $("#reviewed").click(
     function() { 
      var rURL = 'cabinet_reviewed.php?reviewed='; 
       if ($("#reviewed").is(":checked")) 
        rURL = rURL + "yes"; 
       else 
        rURL = rURL + "no"; 
       alert (rURL); 
     $.ajax({ 
      url: rURL, 
      cache: false, 
      success: function(html){ 
       $("#reviewDate").replaceWith(html); 
      } 
     }); 

    }); 

})

Файл cabinet_reviewed.php просто вторит значение из $ _GET [» review '] С помощью этого обновленного кода предупреждение показывает правильный URL, но второй клик не запускает .ajax. Нужно ли мне что-то делать, чтобы снова запустить .ajax?

ответ

5

Попробуйте с != вместо !==

, а также это в качестве альтернативы:

$('#reviewed').is(':checked') 

Ниже код работает последовательно в FF 3.5 и Internet Explorer 8:

$("#reviewed").click(
    function() { 
     if ($("#reviewed").is(":checked")) 
      alert('checked'); 
     else 
      alert('not checked'); 
    } 
);    

После вашего обновления:

Этот код ...

success: function(html){ 
    $("#reviewDate").replaceWith(html); 
} 

... не заменяя элемент с ID=reviewDate в DOM с HTML, который возвращается из вызова Ajax, поэтому он больше не присутствует во второй раз вызов Ajax производится.

Будет ли что-то проще, как эта работа для вас?

success: function(html){ 
    $("#reviewDate").html(html); 
} 
+0

По какой-то причине $ ('# review'). Is (': checked'), похоже, не работает для меня. – Jason

+0

Отредактировано, чтобы добавить полный пример. Это работает в FF/IE последовательно. Вы используете другой браузер, который я мог бы попробовать? – JonathanK

+0

Я нахожусь на FF 3 на MAC - ваш пример работает с предупреждением, но мой оригинал с .ajax не работает - он работает только при первом щелчке. – Jason

5

По-видимому, некоторые ошибки с событием change() для флажков в IE. Попробуйте вместо этого использовать событие click() и посмотрите, работает ли он лучше.

+1

+1 хорошо знать! – JonathanK

+0

Я изменил клик() и не пошел ... он работает в первый раз, когда я нажимаю этот флажок, но если я его снова нажму повторно, он не погаснет. – Jason

1

Вы обычно хотите использовать click событие для отслеживания изменений в Флажки/радиокнопок. Событие change запускается только в том случае, если новое значение отличается от старого значения. В флажках/радиообменах нет никаких средств для начального значения, только атрибут checked, который часто не предопределяется, поэтому необходимо дважды щелкнуть перед событием изменения.

В галочках/радиообменах вы также не хотите проверять значение на val(), это всегда одно и то же. Вы скорее хотите проверить проверенное состояние, используя this.checked.

Таким образом, следующее должно работать:

$(document).ready(function() { 
    $("#reviewed").click(function() { 
     if (this.checked) { 
      // ... 
     } else { 
      // ... 
     } 
    }); 
}); 
Смежные вопросы