Есть ли лучший способ кодировать форму цитаты? - PullRequest
3 голосов
/ 04 июня 2011

Я ищу совет и, возможно, пример кода, ссылки, которые помогут мне улучшить форму цитаты.текущий сценарий таков: -

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

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

любая помощь очень ценится.заранее спасибо.

Ниже приведен код JavaScript для динамических строк, которые я в данный момент использую: -

<SCRIPT language="javascript">
    function addRow(tableID) {
        var table = document.getElementById(tableID);
        var rowCount = table.rows.length;
        var row = table.insertRow(rowCount);
        var colCount = table.rows[0].cells.length;
        for(var i=0; i<colCount; i++) {
            var newcell = row.insertCell(i);
            newcell.innerHTML = table.rows[0].cells[i].innerHTML;
            //alert(newcell.childNodes);
            switch(newcell.childNodes[0].type) {
                case "text":
                        newcell.childNodes[0].value = "";
                        break;
                case "checkbox":
                        newcell.childNodes[0].checked = false;
                        break;
                case "select-one":
                        newcell.childNodes[0].selectedIndex = 0;
                        break;
            }
        }
    }
    function deleteRow(tableID) {
        try {
        var table = document.getElementById(tableID);
        var rowCount = table.rows.length;
        for(var i=0; i<rowCount; i++) {
            var row = table.rows[i];
            var chkbox = row.cells[0].childNodes[0];
            if(null != chkbox && true == chkbox.checked) {
                if(rowCount <= 1) {
                    alert("Cannot delete all the rows.");
                    break;
                }
                table.deleteRow(i);
                rowCount--;
                i--;
            }
        }
        }catch(e) {
            alert(e);
        }
    }
</SCRIPT>

Ниже приведен код php, который я использую для извлечения элементов mysql для выбора.поле со списком

<?php
                $con = mysql_connect('connection details');
                if (!$con)  {
                die('Could not connect: ' . mysql_error());}
                $db=mysql_select_db('database',$con);
                $extract1=mysql_query("query")
                                    OR die(mysql_error());
                $numrows1=mysql_num_rows($extract1);
                echo "<select name='item[]' title='selectItemName'>";
                echo "
                        <option>Select Item Description</option>
                        ";
                while ($row1=mysql_fetch_assoc($extract1)) 
                {
                    $ic[]=$row1['ItemName'];
                }
                foreach ($ic as $i){
                echo "<option>".$i."</option>";
                }
                echo    "</select>";
                mysql_close($con);
                ?>

я также попробовал следующий пример из jquery, который довольно аккуратен.но я новичок и не знаю, как заполнить остальные поля вместе с полем выбора.вот код

<script type="text/javascript"> 

    $(document).ready(function() {
        $("select[multiple]").asmSelect({
            addItemTarget: 'bottom',
            animate: true,
            highlight: true,
            sortable: true
        });

    }); 

</script> 

Ответы [ 2 ]

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

Я не вижу, куда звонят addRow и deleteRow, но я скажу здесь, где могут возникнуть некоторые ваши недостатки:

 1.  var table = document.getElementById(tableID);
 2.  var rowCount = table.rows.length;
 3.  var row = table.insertRow(rowCount);
 4.  var colCount = table.rows[0].cells.length;
  1. Каждый раз, когда вы добавляете строку, вы ищете в таблице таблицу, которая стоит дорого, если вы работаете только с одной таблицей; рассмотреть глобальную переменную и сделать что-то вроде var table = glob_table || document.getElementById(..);

  2. Несмотря на то, что это свойство и не так дорого для извлечения, это все равно может быть утомительно, когда вы можете увеличивать / уменьшать другую глобальную переменную.

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

  4. (аналогично # 2)


Кстати, вы используете jQuery внизу. Лично мне не нравится использовать jQuery, но если вы собираетесь загрузить его, вы уже нанесли большой урон, замедляя работу своей страницы, так что вы могли бы также использовать ее. На самом деле он очень хорош при добавлении / удалении элементов, поэтому я бы посоветовал вам прочитать некоторые учебники по jQuery.

Кроме того, если ваша база данных увеличивается, то вместо повторного создания опций вы захотите обновить ее только с элементами, которые еще не загружены. Поэтому вам нужно использовать временную метку в записях базы данных и сохранить эту временную метку на своем JavaScript / странице, чтобы «обновить с тех пор» (where update_ts >= $last_update_param)

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

Выберите комбо с ~ 3500 предметов? Уч. (N раз для количества строк? Double Ouch.)

Думаю, настало время переосмыслить реализацию. Вероятно, я бы сделал всплывающее окно или что-то для выбора элемента, который [при закрытии] заполняет поле формы. Сохраняйте форму, содержащую только значение, а не значение + 3500 (количество строк).

(Лучший пример, который я могу привести, это phpBB, и когда вы в панели управления администратора выбираете пользователя, которым хотите управлять. Они всплывают со всей [фильтруемой] базой данных, а затем возвращают значение в родительское окно. Я также вижу, что для пользователя также полезно найти элемент в пределах 3500 записей, а не прокручивать выбранную комбинацию)

...