Показать флажок динамически - PullRequest
0 голосов
/ 03 июня 2018

Я создаю флажок подписки / отмены подписки, при регистрации пользователь будет подписан по умолчанию.если пользователь снял флажок (отменить подписку), он запросит подтверждение в confirm() функции jquery и если вернет true, ajax-запрос обновит значение в базе данных и установит флажок для запуска функции subscribe при следующем щелчке (без перезагрузки страницы).).

МОЯ ПРОБА

PHP

<?php if($newsletter_value){ ?>
        <input id="checkbox" type="checkbox" name="checkbox" value="<?php echo $newsletter_value; ?>" onclick="unsubscribe();" checked>
        <span class="label-text"></span>
<? } else{ ?>
        <input id="checkbox" type="checkbox" name="checkbox" value="<?php echo $newsletter_value; ?>" onclick="update_newsletter(1);">
        <span class="label-text"></span>
<? } ?>

JavaScript

function unsubscribe(){
    var c = confirm("Are you sure?");
    if(c){
            update_newsletter(0);
    }else{ $('#checkbox').prop('checked',true)}
}

function update_newsletter(newsletter){
    url = '/updateNewsletter&newsletter='+newsletter ;
    $.ajax({
        type: 'get',
        url: url,
        dataType: 'html',
        success: function() { 
            $('#success').append("<div class='alert alert-success'><i class='fa fa-check-circle'></i> You have successfully modified your subscription <button type='button' class='close' data-dismiss='alert'>&times;</button></div>");
        },
        error: function(xhr, ajaxOptions, thrownError) {
           alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
        }
    });
}

Проблема

При загрузке первой страницы страница получает newsletter_value от контроллера и показывает соответствующий флажок, но как только пользователь щелкает по нему и одновременно нажимает снова, та же функция будет работать, как при первом нажатии (без переключенияв функции).

Надеюсь, вы понимаете.и спасибо за помощь.

1 Ответ

0 голосов
/ 03 июня 2018

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

Это снова означает, что вам придется обменять функцию onclick в success функция обратного вызова AJAX-запроса.

JavaScript

// ...
$.ajax({
    // ...
    success: function() { 
        $('#success').append("<div class='alert alert-success'><i class='fa fa-check-circle'></i> You have successfully modified your subscription <button type='button' class='close' data-dismiss='alert'>&times;</button></div>");
        $('#checkbox').attr("onclick","update_newsletter(1);");
    },
    // ...
});

Способ изменить onclick можно с этого поста .

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