проблема в цикле для - PullRequest
2 голосов
/ 24 июня 2011

Я использую этот код, который работает хорошо. Теперь мне нужно изменить только имя входов, input1, input 2 и т. Д.

<script type="text/javascript">
    $(document).ready(function() {
        $("#input1 > select.profissao").live('change', function(){ 
            $.ajax({
                type: "POST",
                data: "data=" + $(this).val(),
                url: "drop1.php",
                success: function(html) {
                    $("#input1 > select.estatistica").html(html);
                }
            });
        });
 });
</script>

почему эта версия не работает? Я уже проверил код в Lint, и ни одна ошибка не обнаружена. В принципе, если я скопирую приведенный выше код и заменил input1 на input2, он будет работать хорошо, но моя цель - уменьшить избыточность.

<script type="text/javascript">
    $(document).ready(function() {
        for (i=1; i<3; i++) {
        $("#input"+i+" > select.profissao").live('change', function(){ 
            $.ajax({
                type: "POST",
                data: "data=" + $(this).val(),
                url: "drop1.php",
                success: function(html) {
                    $("#input"+i+" > select.estatistica").html(html);
                }
            });
        });
        }
    });
</script>

РЕДАКТИРОВАТЬ: вывод выглядит примерно так <option value=2>Artes</option><option value=1>Humanidades</option>, но это не добавляется в HTML

с циклом мой выпадающий простой перестает работать

Ответы [ 2 ]

3 голосов
/ 24 июня 2011

Вы можете попробовать

<script type="text/javascript">
$(document).ready(function() {
    for (i=1; i<3; i++) {
        (function(idx){
            $("#input"+idx+" > select.profissao").live('change', function(){ 
            $.ajax({
                type: "POST",
                data: "data=" + $(this).val(),
                url: "drop1.php",
                success: function(html) {
                $("#input"+idx+" > select.estatistica").html(html);
               }
            });
            });
        })(i);
    }
});
</script>

И ваша функция получит ту же ссылку i в области видимости.

0 голосов
/ 24 июня 2011

Верхний и нижний блок имеют разные классы для выбора, это одна проблема?

Кроме того, подход конкатенации кажется менее поддерживаемым.

Возможно, рассмотрите возможность использования чего-то подобного

  $('#input1, #input2, #input3').children('select.area').each(function () {
      $(this).live(...);
   });

Редактировать: также выгрузка html-содержимого селектов в ie, не очень хорошо поддерживается и привела ко многим ошибкам для меня, так что вы можете подумать о пересоздании селекта каждый раз

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