проблема с кнопкой голосование

Тема в разделе "JavaScript", создана пользователем SPoX, 13 ноя 2015.

Модераторы: ZiX
  1. SPoX

    SPoX

    Регистр.:
    19 апр 2014
    Сообщения:
    172
    Симпатии:
    24
    привет всем у меня на сайте установлено DLE 10.5 версия и у меня проблема в опросах в новостях

    у меня poll.tpl так
    Код:
    <br />
    <h2 class="heading">{question}</h2>
    {list}
    [voted]<div align="center">количество проголосовавших: {votes}</div>[/voted]
    <br>
    [not-voted]
    <button class="fbutton" type="submit" onclick="doPoll('vote', '{news-id}'); return false;"><span>голосовать</span></button>
    [/not-voted]
    <br />
    <br />
    проблема в том что после голосования кнопка голосовать не исчезает если не сделать рефреш
    остается и когда жмешь ничего не происходит
    хочу сделать как в vote.tpl чтобы после голосования кнопка голосовать исчезало автоматический без рефреша

    мне сказали что проблема в яваскрипте который так выглядит
    Код:
    var c_cache = new Array();
    var dle_poll_voted = new Array();
    
    function doPoll(event, news_id) {
        var frm = document.getElementById('dlepollform_' + news_id);
        var dle_poll_result = frm.status.value;
        var vote_check = '';
        if (dle_poll_voted[news_id] == 1) {
            return;
        }
        if (event != 'results' && dle_poll_result != 1) {
            for (var i = 0; i < frm.elements.length; i++) {
                var elmnt = frm.elements[i];
                if (elmnt.type == 'radio') {
                    if (elmnt.checked == true) {
                        vote_check = elmnt.value;
                        break;
                    }
                }
                if (elmnt.type == 'checkbox') {
                    if (elmnt.checked == true) {
                        vote_check = vote_check + elmnt.value + ' ';
                    }
                }
            }
            if (event == 'vote' && vote_check == '') {
                return;
            }
            dle_poll_voted[news_id] = 1;
        } else {
            dle_poll_result = 1;
            frm.status.value = 1;
        }
        if (dle_poll_result == 1 && event == 'vote') {
            dle_poll_result = 0;
            frm.status.value = 0;
            event = 'list';
        }
        ShowLoading('');
        $.post(dle_root + "engine/ajax/poll.php", {
            news_id: news_id,
            action: event,
            answer: vote_check,
            vote_skin: dle_skin
        }, function(data) {
            HideLoading('');
            $("#dle-poll-list-" + news_id).fadeOut(500, function() {
                $(this).html(data);
                $(this).fadeIn(500);
            });
        });
    }
    
    за ранее спасибо
     
  2. Absolute

    Absolute Крокодил ;)

    Регистр.:
    9 авг 2009
    Сообщения:
    340
    Симпатии:
    162
    Попробуйте так
    Кнопка:
    Код:
    <button class="fbutton" type="submit" onclick="doPoll('vote', '{news-id}', $(this)); return false;"><span>голосовать</span></button>
    яваскрипт
    Код:
    var c_cache = new Array();
    var dle_poll_voted = new Array();
    
    function doPoll(event, news_id, buttonObj) {
        var frm = document.getElementById('dlepollform_' + news_id);
        var dle_poll_result = frm.status.value;
        var vote_check = '';
        if (dle_poll_voted[news_id] == 1) {
            return;
        }
        if (event != 'results' && dle_poll_result != 1) {
            for (var i = 0; i < frm.elements.length; i++) {
                var elmnt = frm.elements[i];
                if (elmnt.type == 'radio') {
                    if (elmnt.checked == true) {
                        vote_check = elmnt.value;
                        break;
                    }
                }
                if (elmnt.type == 'checkbox') {
                    if (elmnt.checked == true) {
                        vote_check = vote_check + elmnt.value + ' ';
                    }
                }
            }
            if (event == 'vote' && vote_check == '') {
                return;
            }
            dle_poll_voted[news_id] = 1;
        } else {
            dle_poll_result = 1;
            frm.status.value = 1;
        }
        if (dle_poll_result == 1 && event == 'vote') {
            dle_poll_result = 0;
            frm.status.value = 0;
            event = 'list';
        }
        ShowLoading('');
        $.post(dle_root + "engine/ajax/poll.php", {
            news_id: news_id,
            action: event,
            answer: vote_check,
            vote_skin: dle_skin
        }, function(data) {
            HideLoading('');
            $("#dle-poll-list-" + news_id).fadeOut(500, function() {
                $(this).html(data);
                $(this).fadeIn(500);
    buttonObj.hide();
            });
        });
    }
     
    SPoX нравится это.
  3. SPoX

    SPoX

    Регистр.:
    19 апр 2014
    Сообщения:
    172
    Симпатии:
    24
    все рабтает но в сорсе остается кусок кода вот так

    Код:
    <form method="post" name="dlepollform_1413" id="dlepollform_1413" action="">
    <br>
    <h2 class="heading"> вопрос?</h2>
    <div id="dle-poll-list-1413">ответ - 0 (0%)<br>
    <div class="pollprogress"><span class="poll1" style="width:0%;">0%</span></div>ответ  - 0 (0%)<br>
    <div class="pollprogress"><span class="poll2" style="width:0%;">0%</span></div>ответ  - 1 (8.33%)<br>
    <div class="pollprogress"><span class="poll3" style="width:8%;">8.33%</span></div>ответ - 5 (41.67%)<br>
    <div class="pollprogress"><span class="poll4" style="width:41%;">41.67%</span></div>ответ - 0 (0%)<br>
    <div class="pollprogress"><span class="poll5" style="width:0%;">0%</span></div>ответ - 0 (0%)<br>
    <div class="pollprogress"><span class="poll1" style="width:0%;">0%</span></div>ответ - 0 (0%)<br>
    <div class="pollprogress"><span class="poll2" style="width:0%;">0%</span></div>ответ - 4 (33.33%)<br>
    <div class="pollprogress"><span class="poll3" style="width:33%;">33.33%</span></div>ответ - 0 (0%)<br>
    <div class="pollprogress"><span class="poll4" style="width:0%;">0%</span></div>ответ - 2 (16.67%)<br>
    <div class="pollprogress"><span class="poll5" style="width:16%;">16.67%</span></div>ответ - 0 (0%)<br>
    <div class="pollprogress"><span class="poll1" style="width:0%;">0%</span></div>ответ - 0 (0%)<br>
    <div class="pollprogress"><span class="poll2" style="width:0%;">0%</span></div>ответ - 0 (0%)<br>
    <div class="pollprogress"><span class="poll3" style="width:0%;">0%</span></div>ответ - 0 (0%)<br>
    <div class="pollprogress"><span class="poll4" style="width:0%;">0%</span></div></div>
    <div align="center">количество проголосовавших: 12</div>
    
    <br>
    
    <br>
    <br><input type="hidden" name="news_id" id="news_id" value="1413">
    <input type="hidden" name="status" id="status" value="0"></form>

    то есть остается
    <form method="post" name="dlepollform_1413" id="dlepollform_1413" action="">
    и в конце

    <input type="hidden" name="news_id" id="news_id" value="1413">
    <input type="hidden" name="status" id="status" value="0"></form>
     
  4. Absolute

    Absolute Крокодил ;)

    Регистр.:
    9 авг 2009
    Сообщения:
    340
    Симпатии:
    162
    Не думаю, что те, изменения, которые я сделал, как-то связаны с подобным траблом.
    В doPoll из элемента передали ссылку на текущий объект jQuery - $(this) и он доступен в buttonObj. После получения ответа от сервера - просто скрываем этот элемент:
    buttonObj.hide();
    В общем-то всё. Можно было и $('.fbutton').hide(), но если кнопок на странице несколько?
    Или есть ещё вариант:
    Код:
    <button class="fbutton hideclass{news-id}" type="submit" onclick="doPoll('vote', '{news-id}'); return false;"><span>голосовать</span></button>
    Код:
    $(".hideclass" + news_id).hide()
     
  5. SPoX

    SPoX

    Регистр.:
    19 апр 2014
    Сообщения:
    172
    Симпатии:
    24
    ааа нет нет все так и должно быть
    все работает
    спасибо за помощь
     
    Absolute нравится это.