Если флажок меняется, используйте jquery для вызова php - PullRequest
2 голосов
/ 19 мая 2011

У меня есть простой флажок на странице, который позволяет пользователю сказать, хотят ли они получать уведомления по электронной почте.Я использую jquery для этого, чтобы вызвать некоторый код PHP, когда флажок меняется.Однако мне не очень повезло, что даже вызов функции jquery (установка флажка ничего не дает), не говоря уже о тестировании функциональности бэкэнда.

Любая помощь в указании на ошибку была бы полезной.Спасибо.

Флажок HTML:

<input id="notify_checkbox" type="checkbox" value="y" name="notify">

jquery:

$('#notify_checkbox').change(function(){

    if($('#notify_checkbox').attr('checked'))
    {
        $.post("/update_notify", { checked: "y", email: "<?php echo $this->session->userdata('email');?>" });
        $( "#notifyresult" ).html( "<p>Awesome, we'll send you an email!</p>" );
    }
    else
    {
        $.post("/update_notify", { checked: "n", email: "<?php echo $this->session->userdata('email');?>" });
        $( "#notifyresult" ).html( "<p>Okay, we won't email you.</p>" );
    }
});

И, наконец, PHP:

function update_notify()
{
    // Passed through AJAX
    $notify = $_POST[checked];
    $email = $_POST[email];

    $this->load->model('musers');
    $query = $this->musers->update_user_notify($email, $notify);
}

РЕШЕНИЕ: Комментарии ниже были полезными, но не окончательным решением.Решением было добавить следующее вокруг моего кода.

$(document).ready(function() {
{);

Ответы [ 3 ]

3 голосов
/ 19 мая 2011

Почему бы не использовать .click() вместо?

JSFIDDLE

Кроме того, как вы можете видеть в моем примере JSFiddle, используйте .is(':checked') вместо attr('checked').

edit после @ Rocket прокомментировал ваше сообщение:

Вы действительно должны указать свои $_POST значения в своем php! Сам не заметил, кредиты на ракета

1 голос
/ 19 мая 2011

Как называется ваш контроллер? Вы должны указать это в URL.

 $.post("/controller/update_notify", ...
0 голосов
/ 19 мая 2011

Проблема заключается в переопределении функции attr в jQuery 1.6 и в разнице между атрибутами и свойствами.

С атрибутами (полученными с помощью attr),значение checked="checked" или его отсутствие остается неизменным, независимо от того, действительно ли элемент проверен или нет.

со свойствами (извлекается с помощью prop от jQuery 1.6),фактическое состояние элемента найдено.Это эквивалентно проверке свойства checked элемента (что предпочтительно, поскольку вам не нужно делать новый выбор jQuery).Лучшее решение было бы следующим:

if (this.checked) {

См. JsFiddles, показывающий это:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...