Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Добавление строк в таблицу и скрытие таблицы. (https://javascript.ru/forum/misc/51020-dobavlenie-strok-v-tablicu-i-skrytie-tablicy.html)

III 21.10.2014 12:49

Цитата:

Сообщение от danik.js (Сообщение 336723)
У тебя же не мультиселект. Так какого хрена все опшны помечены как selected?

Это я ошибочно selected вставил после первого пункта.

skrudjmakdak 21.10.2014 13:00

<html>
<body>
<select onchange="change(this.value);">
	<option value="0">Без ограничений</option>
	<option value="1">1</option>
	<option value="2">2</option>
	<option value="4">4</option>
	<option value="6">6</option>
	<option value="10">10</option>
</select>

<table border="1">
	<thead>
		<tr>
			<th scope="col">Поле 1</th>
			<th scope="col">Поле 2</th>
			<th scope="col">Поле 3</th>
			<th scope="col">Поле 4</th>
		</tr>
	</thead>

	<tbody id="dynamic"></tbody>
</table>

<script>
function getTr () {
	var tr = document.createElement('tr');
	
	var html = [
		'<td>',
			'<input type="text">',
		'</td>',
		'<td>',
			'<input type="text">',
		'</td>',
		'<td>',
			'<input type="text">',
		'</td>',
		'<td>',
			'<input type="text">',
		'</td>'].join('');
	
	tr.innerHTML = html;
	return tr;
}


var tb = document.querySelector('#dynamic')
function change (v) {
	console.log(v);
	
	if (v == 0) {
		Array.prototype.forEach.call(tb.children, function (tr) {
			tr.style.display = 'none';
		});
	} else {
		for (var i = 0; i < v; i++) {
			tb.appendChild(getTr());
		}
	}
}
</script>
</body>

</html>

III 21.10.2014 13:20

Спасибо за ответ, но строки-то добавляются, это и мой (ну не мой, если честно, а найденный в инете) скрипт делает, а вот таблица (с ее заголовоком) при выборе "Без ограничений" не скрывается.
В LiveCycle FormDesigner я делаю так:
<event activity="exit" name="event__exit">
               <script contentType="application/x-javascript">Table3.Row1.instanceManager.setInstances(К_воВод.rawValue);
this.resolveNode("Table3").presence = "visible";
</script>
            </event>
            <event activity="change" name="event__change">
               <script contentType="application/x-javascript">if ($.boundItem(xfa.event.newText) == "Без ограничений") {
  this.resolveNode("Table3").presence = "hidden";
}
</script>
            </event>

и все классно работает, а вот в HTML у меня не получается.

skrudjmakdak 21.10.2014 13:38

ну дак, найдите вашу таблицу
var table = document.querySelector('table');
и скройте ее
table.style.visibility = 'hidden';

BSI 21.10.2014 15:11

Да дайте человеку конкретный рабочий код, который он просит. Видно же , что человек слабо знает эту тему, в инете может не один час искал и не нашел. Может он простой пользователь и ему это понадобится один раз в жизни. Надо то вставить в код наверное всего пару строк и дело с концом. Если бы я мог, то без проблем помог. Всем всего наилучшего.

BSI 22.10.2014 14:13

III, вот тебе правильное решение. Я хотя и не спец, но проблему твою решил. Пользуйся на здоровье.
<body>
 <p><strong>Динамическая таблица.</strong></p> 
                <caption>
                    <!-- Кол-во элементов option и их значения value можно задать произвольно //-->
                    <select id="rows_setup">
                        <option value="0">--Установить кол-во строк--</option>
                        <option value="0">Без ограничений</option>
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="4">4</option>
                        <option value="6">6</option>
                        <option value="10">10</option>
                    </select>
                </caption>		
 <p><p/>	
 <form id= Tablica method="post" action="">
            <table  width="650" border="1" cellspacing="0" cellpadding="5">
                <!-- Заголовки //-->				
                <thead>
                    <tr>
                        <th scope="col">Поле 1</th>
                        <th scope="col">Поле 2</th>
                        <th scope="col">Поле 3</th>
                        <th scope="col">Поле 4</th>
                    </tr>
                </thead>
                <!-- Сюда будем добавлять строки //-->
                <tbody id="dynamic"></tbody>
            </table>
        </form>
        <script>
            /* Навешиваем логику: */
            setupTable(
                "dynamic", /* ID элемента <tbody> таблицы */
                "rows_setup", /* ID элемента <select> для установки кол-ва строк */
                {1:"val1", 2:"val2", 3:"val3", 4:"val4"} /* Конфигурация строки таблицы */
            );
		function setupTable(tableId, selectId, fields) {
    var htmlTBody   = document.getElementById(tableId),
        htmlSelect  = document.getElementById(selectId),
        rowTpl      = document.createElement("TR");
    /* Строим шаблон строки таблицы один раз, в дальнейшем будем просто его клонировать */
    for(var field in fields) {
        if (false === fields.hasOwnProperty(field)) continue;
        var TD = document.createElement("TD"),
            INPUT = document.createElement("INPUT");
        INPUT.name = fields[field] + "[]";
        TD.appendChild(INPUT);
        rowTpl.appendChild(TD);
    }
    // Вешаем обработчик на элемент управления кол-вом строк
    htmlSelect.onchange = function (e) {
        var numRows = htmlSelect.options[htmlSelect.selectedIndex].value;
        /* Отслеживаем отрицательные значения а то мало ли какие там значения в option понаставят */
        numRows = numRows < 0 ? 0 : numRows;
        /* Удаляем те строки которые есть. */
        while(htmlTBody.firstChild) htmlTBody.removeChild(htmlTBody.firstChild);
        for (var i = 0; i < numRows; i++) {
            htmlTBody.appendChild(rowTpl.cloneNode(true));
        }
		if (numRows == 0) {
htmlTBody.parentNode.style.display = "none";
} else {
htmlTBody.parentNode.style.display = "";
} 
    };
}	
	</script>
    </body>

kostyanet 22.10.2014 15:31

Цитата:

Сообщение от III
Необходимо доработать код так, чтобы все работало от одного (верхнего) выпадающего списка. Если выбрать "Без ограничений", то таблица скрылась, если иначе, то добавлялось, указанное количество строк. Помогите новичку.

Нашли говнокод по-js, логику приложения описать не смогли по-ру, какого спрашивается вообще тогда?

Не так это делается. Заводится 1 поле на 1 ячейку (кажется у вас на этом и кончается) которые тупо подсовываются в активную строку и используются тупо как таковые, ну, как input'ы. Данные с которых тупо валятся в обычный {} из которого по субмиту валятся то самое поле после JSON' и уходят таким макром на сервер, а там json_decode() и вперде.

kostyanet 22.10.2014 15:33

Проблему представляют кнопки file, вот их да, придется размножать.

BSI 22.10.2014 17:38

Человек пишет:"Прошу строго не судить, я всего пару недель как осваиваю HTML и JS." Ему, я так понимаю, надо просто подсказать что, как и где писать в коде, а вы про сервер толкуете. Да он просто на простой странице хочет понять что к чему.

kostyanet 22.10.2014 17:43

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

Так вот начинающие 2 недели пишут return "Hello World" а не datagrid рисуют.


Часовой пояс GMT +3, время: 23:07.