В то время как проблема цикла - JavaScript - jQuery .Clone () - PullRequest
0 голосов
/ 24 февраля 2012

Я вот-вот выдернул себе волосы ... Я понимаю, что это может быть неправильным подходом ... но мои руки несколько связаны ... Пожалуйста, предлагайте какие-либо предложения.

Надеюсь, этого достаточно, чтобы объяснить проблему ..

Желание - Выбрать на «Контролируемой строке» манипулирует Выбрать на «Контролируемой строке»

Проблемы - если я делаю цикл while, работает только последний столбец (контролирует верхнюю строку)

Я понимаю, что мог бы вручную кодировать каждый столбец, а не цикл, но хочу скомпоновать это и сохранить его небольшим ..

Заранее спасибо !!

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
        <meta http-equiv="Content-Language" content="en-us" />
        <title>Selects Duplicated</title>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <script>
        $(document).ready(function(){ //runs when document.ready
            var $superduper;
                i=0;
                $Tbl_1 = "Tbl";

                while (i<=2)
                {
                    FltTbl = "#flt" + i + "_" + $Tbl_1;
                    FltTbl2 = "flt" + i + "_" + $Tbl_1 + "_" +"2";
                    ColContainer = "colcontainer" + i;

                    $((FltTbl)).clone().attr('id', (FltTbl2)).attr('class', (FltTbl2)).appendTo("#" + (ColContainer)).find('select > option:selected').each(function() {});
                    $(function() { 
                    $("#" + (FltTbl2)).change(function() { 
                    $((FltTbl)).val($(this).val()).trigger('change'); //this triggers when clone select changes //
                    });
                    });
                    i++;
                }
        });

        </script>

    </head>

    <body>
    <table id="Tbl0_2">
        <tr>
            <td width="70">
                <div>
                    <select id="flt0_Tbl" class="flt0_Tbl">
                        <option value="">--</option>
                        <option value="1-1">1-1</option>
                        <option value="1-2">1-2</option>
                        <option value="1-3">1-3</option>
                        <option value="1-4">1-4</option>
                    </select>
                </div>
            </td>
            <td width="70">
                <div>
                    <select id="flt1_Tbl" class="flt1_Tbl">
                        <option value="">--</option>
                        <option value="2-1">2-1</option>
                        <option value="2-2">2-2</option>
                        <option value="2-3">2-3</option>
                        <option value="2-4">2-4</option>
                    </select>
                </div>
            </td>
            <td width="70">
                <div>
                    <select id="flt2_Tbl" class="flt2_Tbl">
                        <option value="">--</option>
                        <option value="3-1">3-1</option>
                        <option value="3-2">3-2</option>
                        <option value="3-3">3-3</option>
                        <option value="3-4">3-4</option>
                    </select>
                </div>
            </td>
            <td>
            <div>Controlled Row</div>
            </td>
        </tr>
        <tr>
            <td width="70"><div class="colcontainer0" id="colcontainer0"></div></td>
            <td width="70"><div class="colcontainer1" id="colcontainer1"></div></td>
            <td width="70"><div class="colcontainer2" id="colcontainer2"></div></td>
            <td><div>Controlling Row</div></td>
        </tr>
        <tr>
            <td width="70"><div>Nope</div></td>
            <td width="70"><div>Nope</div></td>
            <td width="70"><div>Works</div></td>
        </tr>
    </table>
    </body>
    </html>

Ссылка: http://jsfiddle.net/EpicVision/x9ASj/

1 Ответ

1 голос
/ 24 февраля 2012

Проблема состоит в том, что инициирующее изменение использует селекторы из замыкания, в котором находится цикл, поэтому селекторы всегда будут третьим блоком выбора к концу цикла и, следовательно, будут третьим селектором, когда пользователь что-то щелкает.

Я обновил вашу скрипку http://jsfiddle.net/steveukx/x9ASj/1/, чтобы показать, как создать замыкание для фиксирования значения селекторов.

(Стоит отметить, что создание замыканий в цикле обычно считается плохой практикой).

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