• Можно ли как то упростить JS?

    twobomb
    @twobomb
    Может так
    <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
    <img src="loading.gif" id="img_load"  height="420">
    <a href="#" class="button">кнопка</a>
    <a href="#" class="button">кнопка</a>
    <a href="#" class="button">кнопка</a>
    <a href="#" class="button">кнопка</a>
    <div id="results"></div>

    $(document).ready(function(){
        $(".button").each(function(i,e){
            $(e).bind("click",function(){set(i);});
        });
    set(4);
    });
    function set(id){
            $.ajax({
                type: 'POST',
                url: 'index.php',
                dataType: 'json',
                data: { right: id },
                success: function(data) { 
                    $('#img_load').attr('src', data.src);
                    $('#results').text(data.validate);
                      $('.button').text(function(i) { return data["btn_" + (i + 1)]; });
                } 
            });
    }
    Ответ написан
    Комментировать
  • Можно ли как то упростить JS?

    разве что ваш ajax переписать на post
    Ответ написан
    Комментировать
  • Как реализовать картинку и 4 ответа?

    @dexes56
    Back-end engineer
    <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
    
    <img src="#" id="img_load">
    
    <a href="#" name="button1" data-num="1" class="button">кнопка</a>
    <a href="#" name="button2" data-num="2" class="button">кнопка</a>
    <a href="#" name="button3" data-num="3" class="button">кнопка</a>
    <a href="#" name="button4" data-num="4" class="button">кнопка</a>
    
    <div class="results"></div>
    
    <script language="javascript" type="text/javascript">
        $('.button').on('click', function(e){
            e.preventDefault();
    
            var img = $('#img_load');
            var current = $(this);
            var buttons = $('.button');
    
            $.ajax({
                type: 'POST',
                url: 'setings.php',
                data: 'btn=' + current.data('num'),
                success: function(data){
                    $('.results').html(data);
    
                    buttons.each(function(){
                        $(this).html( 'Кнопка ' + $(this).data('num') );
                    });
    
                    current.html( 'Кликнули сюда' );
    
                    img.attr('src', 'image url');
                }
            });
    
        });
    </script>
    Ответ написан
    Комментировать
  • Не понимаю как получился масив?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    array_rand возвращает ключи массива, а не элементы, поэтому у вас и получается от 0 до 15.
    Если вы делаете shuffle, то вполне достаточно только его:
    $array = range(1, 16);
    shuffle($array);
    echo implode('<br/>', array_slice($array, 0, 4));
    Ответ написан
    Комментировать
  • Как упростить js код?

    Выкинуть глобальные переменные.

    Что касается имен: i, j, x — нормальная практика, хотя обычно с i и j идет какая-нибудь k. lng — тоже все ясно. Вот с i18n.t явно надо что-то делать, ибо она берется откуда-то извне, непонятно, что делает и к чему относится. Можно, конечно, догадаться, что это объект интернационализации, возвращающий заданное значение на текущем языке, но все же. Если не оформлять все это в объект отдельный, то хотя бы в качестве параметров функций такие вещи передавать стоит, может, читабельнее станет код.

    А вот сам по себе цикл в shuffle() читается ужасно. И не в именовании дело, а в оформлении.

    buttons.push(painters[0]);      
    buttons.push(painters[1]);
    buttons.push(painters[2]);
    buttons.push(painters[3]);
    ...
    document.getElementById("btn1").innerHTML = buttons[0];
    document.getElementById("btn2").innerHTML = buttons[1];
    document.getElementById("btn3").innerHTML = buttons[2];
    document.getElementById("btn4").innerHTML = buttons[3];

    Тут проще обойтись циклом или forEach(). Если filter() используете, видимо, предполагается его поддержка, а значит и forEach(). Для первой части можно использовать и slice().
    Ответ написан
    Комментировать