Заполнение и проверка ячеек таблицы
Строится след динамическая таблица (размерность 4xn). Ячейки таблицы заполняются от 0 до n (n- число из inputа с id="cols").
Необходимо чтобы 2 строка заполнялась от 0 до n как сейчас, а 4 строка по формуле ![]() Код:
|
MrSmitt,
Ты же можешь в своем makeRow сделать проверку на === 4 и в таком случае заполнять строку по другому правилу и если у тебя p === q то в схеме бернулли можно(логично) оставить p c показателем "n" |
Не понял насчёт 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,
Ну вот же у тебя есть for (var i = 0; i < opts.row; i++) { table.append(methods.makeRow(i)); } и opts.row у тебя == 2 Ты в цикле передаешь индекс i в метод makeRow Что тебе мешает проверить этот индекс на === 4 (или сколько тебе там надо) прежде чем делать return |
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(/* по формуле */); |
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> |
рони,
благодарю, а не могли бы разъяснить 19 строку? Rise, такой вызов в купе с факториалом из поста #9 не сработал,поэтому и задал вопрос. А вот так получилось this.html($.fn.factorial(i)); |
Цитата:
|
Цитата:
this.factorial(i) |
рони,
Спасибо за пояснения, не учёл, что обычного return (15, 16 строка) недостаточно и нужно выйти из "цикла" (14). А как следует проверять значения в ячейках? Т.е. то, что допустим в 4 ряду во 2й ячейке именно то значение, которое посчиталось в $.fn.duplicate = function (count, row) иначе alert? |
Цитата:
|
Rise,
![]() Ну вот к примеру 9 строка кода заполняет/высчитывает P0,P1 и т.д. Необходимо, если юзер попытается ввести значение в ячейку таблицы не совпадающее со значением, которое до него высчитала и записала функция (9 строка) вывести ошибку. $.fn.duplicate = function (count, row) { var tmp = []; var n=parseInt($("#cols").val()); for (var i = 0; i < count; i++) { if (this[0].tagName === 'TD') { if (row % 2) { this.html(Math.pow(0.5,n)*($.fn.factorial(n)/($.fn.factorial(i)*$.fn.factorial(n-i)))); } else { this.html(i); } } $.merge(tmp, this.clone().get()); } return this.pushStack(tmp); }; $.fn.factorial=function(i){ function f_Factorial(i){ if (i==0 || i==1) return 1; else return i*f_Factorial(i-1); } var Factorial=f_Factorial(i); return this.length ? $(this).text(Factorial):Factorial }; UPD: ещё пример + пробная реализация, пользователь захочет в X0 записать не 0, а другую цифру. Программа должна выдать ошибку, что в X0 всегда 0 и т.д. var hasEmpty= false; $('output tr:odd:eq(0) td:eq(0)').each(function(i){ if($(this).html() != 0){ alert("Введено не верно !"); hasEmpty= true; return false; }; }) |
Rise,
Логики искать не приходится,это своего рода тз полное абсурда. Пользователь может вводить текст в ячейки (как возможность), но в тоже время если он их изменит, то формула которая считает по значениям из таблицы посчитает неправильно. Ещё возник вопрос гораздо более логичный, можно ли заставить программу работать как с числами с запятой, так и с точкой (в текущ ситуации он числа с запятой зануляет)? Или нужно заменять запятую на точку (опять же как?)? |
Rise,
Не могу понять где следует парсить текст , а не заменять запятую на точку. $('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) }); }); }); |
Rise,
Решил,дать возможность вводить запятую (не меняя на точку). Написал parseFloat в 4 строке. Получаю 0 при вводе запятой. Изменил непонятную строку 17 на var val = +this.value получил NaN UPD: не менял parseInt. Строку #17 поменял на var val =parseFloatExt(this.value) ; и получил замену запятой на точку. |
Rise,
а что всё таки делает строка ? var val = + this.value || 0 ; |
Часовой пояс GMT +3, время: 04:01. |