29.07.2017, 18:25
|
Аспирант
|
|
Регистрация: 09.07.2017
Сообщений: 49
|
|
JQuery При клике на кнопку Restore данные восстанавливаются
вот такая задача:
Напишите программу, которая позволяет выбирать отдельные ячейки в наборе(таблица): при клике на ячейку она красится в черный цвет, при повторном клике - в белый.
При клике на кнопку Clear вся область очищается.
При клике на кнопку Restore данные восстанавливаются.
Поле ячеек генерируется функцией, в которую передается количество ячеек по горизонтали и вертикали, а также элемент, в который ячейки будут нарисованы.
Мой код
function cat(rows, cols) {
var $table = $('<table>').appendTo($('#content'));
for (var i = 0; i < rows; i++) {
var $tr = $('<tr>').appendTo($table);
for (var j = 0; j < cols; j++) {
var $td = $('<td>').appendTo($tr);
}
}
}
cat(10, 10);
$('td').on('click',function bgColor(){
$(this).css('background', '#000');
});
$('#clr').on('click',function(){
$('td').css('background', 'none');
});
$('rest').on('click',function(){
});
Не могу понять как можно сделать кнопку Restore.
Подскажите пожалуйста
|
|
29.07.2017, 18:39
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Сохранить данные можно в замыкании, локал сторейдж или куки
|
|
29.07.2017, 21:29
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
отмена кликов в таблице
Tanya51,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
td{
width: 40px;
height: 40px;
border: 1px #0000FF solid;
}
table{
border-collapse: collapse;
border: 1px #0000FF solid;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function() {
function cat(rows, cols, sel) {
var table = $("<table>").appendTo(sel);
var arr = new Array(rows * cols);
var tr = $("<tr>");
var td = $("<td>");
arr = $.map(arr, function(el, i) {
td.clone().appendTo(tr).click(function() {
arr = rest[k].slice(0);
arr[i] = !arr[i];
rest.length = ++k;
rest[k] = arr;
setColor()
});
if (!((i + 1) % cols)) {
tr.appendTo(table);
tr = tr.clone().empty()
}
return false
});
return arr.slice(0)
}
var rest = [cat(5, 5, "#content")];
var k = 0;
function setColor() {
$.each(rest[k], function(i, el) {
$("td").eq(i).css("background-color",
el ? "#FF00FF" : "")
});
$(".rest span").text("(" + k + ")")
}
$(".clr").on("click", function() {
var ret = rest[k].some(function(a) {
return a
});
if (!ret) return;
rest[++k] = new Array(rest[k - 1].length);
setColor()
});
$(".rest").on("click", function() {
if (k > 0) {
--k;
setColor()
}
})
});
</script>
</head>
<body>
<div id="content"></div>
<button class="clr">clr</button><button class="rest">rest<span>(0)</span></button>
</body>
</html>
Последний раз редактировалось рони, 29.07.2017 в 22:40.
|
|
30.07.2017, 04:17
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Рони, много буков
<html>
<head>
<style>
table{
border-collapse: collapse;
}
td{
width: 20px;
height: 20px;
border: 1px solid red;
}
.black{
background-color: #000;
}
</style>
</head>
<body>
<button id="clr">clr</button><button id="rest">rest</button>
<script>
((rows, cols, el) => document.querySelector(el).insertAdjacentHTML('beforeend', '<table>'+'<tr>'.concat('<td>'.repeat(cols)).repeat(rows)))(10, 10, 'body');
var t; (res=()=>{
var table = document.querySelector('table'), tds = table.querySelectorAll('td');
tds.forEach(el => el.onclick = e => {
el.classList.toggle("black");
t = table.innerHTML;
});
document.querySelector('#clr').onclick = () => tds.forEach(el => el.className ='');
document.querySelector('#rest').onclick = () => {
table.innerHTML = t;
res();
};
})();
</script>
</body>
</html>
</body>
</html>
Последний раз редактировалось j0hnik, 30.07.2017 в 07:39.
|
|
30.07.2017, 08:29
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
j0hnik,
JQuery где?
|
|
30.07.2017, 08:32
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Сообщение от j0hnik
|
много буков
|
строка 36-37
|
|
30.07.2017, 15:46
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Сообщение от рони
|
j0hnik,
JQuery где?
|
<html>
<head>
<style>
table{
border-collapse: collapse;
}
td{
width: 20px;
height: 20px;
border: 1px solid red;
}
.black{
background-color: #000;
}
</style>
</head>
<body>
<button id="clr">clr</button><button id="rest">rest</button>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
((rows, cols, el) => $(el).append('<table>'+'<tr>'.concat('<td>'.repeat(cols)).repeat(rows)))(10, 10, 'body');
var t; (res=()=>{
var table = $('table'), tds = $('td');
tds.click(function(){
$(this).toggleClass("black");
t = table.html();
});
$('#clr').click(()=> tds.removeClass("black"));
$('#rest').click(() =>{
table.html(t);
res();
});
})();
</script>
</body>
</html>
рони, если надо решить на jquery, но некоторая часть решения нативно будет короче и быстрей, что будете делать? короткий путь или не отступать от общего стиля?
|
|
30.07.2017, 16:36
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Сообщение от j0hnik
|
короткий путь
|
|
|
01.08.2017, 18:50
|
Аспирант
|
|
Регистрация: 09.07.2017
Сообщений: 49
|
|
Сообщение от j0hnik
|
короткий путь или не отступать от общего стиля?
|
А вы проверяли код в браузере? Он не работает. Клик не производится.
|
|
01.08.2017, 19:27
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Tanya51,
=> стрелочные функции и repeat, не всех браузерах работают. смотрите в Google Chrome или Mozilla Firefox или пример пост №4.
|
|
|
|