Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.10.2016, 12:37
Интересующийся
Отправить личное сообщение для MrSmitt Посмотреть профиль Найти все сообщения от MrSmitt
 
Регистрация: 28.07.2016
Сообщений: 16

Заполнение и проверка ячеек таблицы
Строится след динамическая таблица (размерность 4xn). Ячейки таблицы заполняются от 0 до n (n- число из inputа с id="cols").
Необходимо чтобы 2 строка заполнялась от 0 до n как сейчас, а 4 строка по формуле , где p=0,5;q=0,5;n=число из inputа с id="cols", k=номер ячейки в таблице.



Код:
(function ($) {
		var opts = {
			row: 2,
			col: 2,
			add: 'html'
		};
		var methods = {
			init: function (o) {
				var table = $('<table />');
				opts = $.extend(opts, o);
				if (opts.row <= 0 || opts.col <= 0) {
					alert('Некорректные значения!');
					return false;
				}
				for (var i = 0; i < opts.row; i++) {

					table.append(methods.makeRow(i));
				}
				alert('Введите значения СВ и соответствующие им вероятности');
				this[opts.add](table);

			},
			makeRow: function (i) {
				var L = methods.letter(i);
				return $('<tr />', {
						html: $('<td />').duplicate(opts.cols)
					}).duplicate(2)
					.first()
					.find('td').each(function (i, el) {
						$(el).html(L + '<sub>' + i + '</sub>');
					})
					.end()
					.prepend($('<td />', {
						attr: {
							rowspan: 2
						},
						text: L
					})).end();
			},
			letter: function (i) {
				return ['X', 'P'][i]
			}
		};
		$.fn.duplicate = function (count) {
			var tmp = [];
			for (var i = 0; i < count; i++) {
				if (this[0].tagName === 'TD') {

					//this.html('&nbsp;')
						 this.html(i)
					// this.text(0)
				}
				$.merge(tmp, this.clone().get());
			}
			return this.pushStack(tmp);
		};
		$.fn.generateTable = function (o) {
			methods.init.apply(this, arguments);
			return this
		};
	}(jQuery));

	$('form').on('submit', function (e) {
		e.preventDefault();
		$('output').generateTable({
				cols: parseInt($('#cols', this).val())+1,
				add: 'html'
			}).find("tr:odd ")
			.each(function (indx, tr) {
				var minMax = [7, 1];
				$('td', tr).click(function () {
					var text = $(this).text(),
						varX = $("<input/>", {
							"value": text,
							"click": function (event) {
								event.stopPropagation()
							},
							"blur": function () {
								var val = +this.value || 0 ;
								if (val < 0 || val > minMax[indx] ) {
									alert("Диапазон от 0 до 7 ");
									val = text;
								};
				 				$(this).parent().html(val)
							}
						});
					$(this).html(varX);
					varX.setCursorPosition(text.length)

				});
			});
	});
});
Как вообще разделить процесс заполнения строк таблицы?

Последний раз редактировалось MrSmitt, 06.10.2016 в 13:27.
Ответить с цитированием
  #2 (permalink)  
Старый 06.10.2016, 16:12
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

MrSmitt,
Ты же можешь в своем makeRow сделать проверку на === 4 и в таком случае заполнять строку по другому правилу

и если у тебя p === q то в схеме бернулли можно(логично) оставить p c показателем "n"
Ответить с цитированием
  #3 (permalink)  
Старый 06.10.2016, 17:34
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

MrSmitt, покажи скрин таблицы...
Ответить с цитированием
  #4 (permalink)  
Старый 06.10.2016, 17:36
Интересующийся
Отправить личное сообщение для MrSmitt Посмотреть профиль Найти все сообщения от MrSmitt
 
Регистрация: 28.07.2016
Сообщений: 16

Не понял насчёт makeRow, которые фактически участвует в заполнении 0 и 2 строк таблицы заголовками-буквами.
В моём понимании , нужно изменить часть кода
for (var i = 0; i < count; i++) {
				if (this[0].tagName === 'TD') {
						 this.html(i)
				}
				$.merge(tmp, this.clone().get());
			}

(в котором идёт заполнение по числу колонок count), так чтобы проверялась строка "tr:odd:first"

Rise,

Последний раз редактировалось MrSmitt, 06.10.2016 в 17:40.
Ответить с цитированием
  #5 (permalink)  
Старый 06.10.2016, 17:44
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

MrSmitt,
Ну вот же у тебя есть
for (var i = 0; i < opts.row; i++) {

					table.append(methods.makeRow(i));
				}

и opts.row у тебя == 2
Ты в цикле передаешь индекс i в метод makeRow
Что тебе мешает проверить этот индекс на === 4 (или сколько тебе там надо) прежде чем делать return
Ответить с цитированием
  #6 (permalink)  
Старый 06.10.2016, 19:27
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от MrSmitt Посмотреть сообщение
В моём понимании , нужно изменить часть кода
Да, сделай в duplicate второй параметр и передавай туда индекс строки, в условии получится: нечетный индекс - значения по формуле, четный - по индексу.
makeRow: function (i) {
	var L = methods.letter(i);
	return $('<tr />', {
			html: $('<td />').duplicate(opts.cols, i)
		}).duplicate(2)

$.fn.duplicate = function (count, row) {
	var tmp = [];
	for (var i = 0; i < count; i++) {
		if (this[0].tagName === 'TD') {
			if (row % 2) {
				this.html(/* по формуле */);
			} else {
				this.html(i);
			}
		}
		$.merge(tmp, this.clone().get());
	}
	return this.pushStack(tmp);
};
Ответить с цитированием
  #7 (permalink)  
Старый 06.10.2016, 21:21
Интересующийся
Отправить личное сообщение для MrSmitt Посмотреть профиль Найти все сообщения от MrSmitt
 
Регистрация: 28.07.2016
Сообщений: 16

Rise,
Хотел делать проверки в makeRow (if i===0) и (if i===1) и соответственно возвращать условно говоря duplicate или ново написанный duplicate2 , но Ваш вариант оказался более лаконичен.

Что касается формулы, можно ли написать функцию для вычисления факториала
$.fn.factorial=function(i){
            if(i==0 || i==1) 
            	{return 1;}
            else {
            	return(i*factorial(i-1));
            }
        };

и как его следует вызвать здесь?
this.html(/* по формуле */);
Ответить с цитированием
  #8 (permalink)  
Старый 06.10.2016, 21:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

factorial jquery
MrSmitt,

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
    $.fn.factorial = function(m_x) {
        function f_Factorial(m_x) {
            if (m_x == 0 || m_x == 1) return 1;
            else return m_x * f_Factorial(m_x - 1)
        }
        var Factorial = f_Factorial(m_x);
        return this.length ? $(this).text(Factorial) : Factorial
    };
    $("div").factorial(5).css({
        color: "#FF0000"
    });
    $("p").text($.fn.factorial(4)).css({
        color: "#FF00FF"
    })
});
  </script>
</head>

<body>
<div></div>
<div></div>
<p></p>
<p></p>
</body>
</html>
Ответить с цитированием
  #9 (permalink)  
Старый 06.10.2016, 23:01
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

MrSmitt, Вычислить факториал
this.html(factorial(i));
Ответить с цитированием
  #10 (permalink)  
Старый 06.10.2016, 23:14
Интересующийся
Отправить личное сообщение для MrSmitt Посмотреть профиль Найти все сообщения от MrSmitt
 
Регистрация: 28.07.2016
Сообщений: 16

рони,
благодарю, а не могли бы разъяснить 19 строку?
Rise,
такой вызов в купе с факториалом из поста #9 не сработал,поэтому и задал вопрос.
А вот так получилось
this.html($.fn.factorial(i));

Последний раз редактировалось MrSmitt, 06.10.2016 в 23:21.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по ширине ячеек таблицы demoniqus Общие вопросы Javascript 4 02.02.2014 13:19
Заполнение таблицы Hisot Элементы интерфейса 33 15.07.2013 21:16
Подсветка родительских ячеек таблицы Demath Элементы интерфейса 10 11.02.2013 14:33
IE 8: баг при динамическом display=none; у ячеек таблицы SegaMega Элементы интерфейса 0 21.09.2012 06:47
Не выводится содержимое ячеек таблицы SER Events/DOM/Window 2 23.06.2011 17:48