创建数独网格(Javascript 和 HTML),将不允许输入单元格
Creating a Sudoku Grid (Javascript and HTML), won't allow input to cells
所以我得到了我的程序 运行,它创建了一个数独网格,并且在它下面有一个单行 table,以允许输入数字。
但是,当我点击底部的数字并点击单元格以便数字可以进入单元格时,它不起作用。 (我双击了,表示我点击了)
我选择了 1,然后点击了一个单元格,想要在该单元格中出现一个 1。但相反,它什么都不做。
这是我的 HTML:
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="Generated Sudoku">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<script src="http://zeptojs.com/zepto.min.js"></script>
<title>Sudoku Generator</title>
</head>
<body>
<h1>Sudoku</h1>
<table id="sudokuTable">
</table>
<table>
<tr>
<td class="numberSelector">1</td>
<td class="numberSelector">2</td>
<td class="numberSelector">3</td>
<td class="numberSelector">4</td>
<td class="numberSelector">5</td>
<td class="numberSelector">6</td>
<td class="numberSelector">7</td>
<td class="numberSelector">8</td>
<td class="numberSelector">9</td>
</tr>
</table>
<button type="button" onclick="createSudokuTable()">New</button>
</body>
</html>
这是我的 CSS:
td {
border:1px solid black;
width:20px;
height:20px;
text-align:center;
cursor:pointer;
}
.numberSelector {
background-color:blue;
color:yellow;
font-family:Arial,Sans-Serif;
}
.selectedNumber {
background-color:yellow;
color:blue;
}
这是我的 JavaScript:
function createSudokuTable() {
var htmlText = '';
for (var row = 1; row <= 9; row++) {
htmlText += '<tr>';
for (var column = 1; column <= 9; column++) {
htmlText += '<td class="sudokuCell" id="cell_' + row + '_' + column + '"> </td>';
}
htmlText += '</tr>';
}
$('#sudokuTable').html(htmlText);
}
var inputNumber = 1;
function clicked() {
cellId = this.id;
if ($('#' + cellId).text() == inputNumber) {
$('#' + cellId).text(' ');
} else {
$('#' + cellId).text(inputNumber);
}
}
function selectNumber() {
inputNumber = this.innerText;
$('.numberSelector').removeClass('selectedNumber');
$(this).addClass('selectedNumber');
}
$('.sudokuCell').on('click', clicked);
$('.numberSelector').on('click', selectNumber);
顺便用过Zepto :)
任何帮助将不胜感激:) 谢谢!
问题出在这一行:
$('.sudokuCell').on('click', clicked);
您正在为 .sudokuCell
元素的 click
事件附加处理程序,该事件在页面加载时不存在。您必须将事件 处理委托给事件附加时存在的最近的父级。
要解决此问题,请在您的代码中进行以下简单更改:
$('#sudokuTable').on('click','.sudokuCell', clicked);
在这里查看完整的功能代码:JSBIN
在此处了解有关事件委托的更多信息:Understanding Event Delegation
所以我得到了我的程序 运行,它创建了一个数独网格,并且在它下面有一个单行 table,以允许输入数字。
但是,当我点击底部的数字并点击单元格以便数字可以进入单元格时,它不起作用。 (我双击了,表示我点击了)
我选择了 1,然后点击了一个单元格,想要在该单元格中出现一个 1。但相反,它什么都不做。
这是我的 HTML:
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="Generated Sudoku">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<script src="http://zeptojs.com/zepto.min.js"></script>
<title>Sudoku Generator</title>
</head>
<body>
<h1>Sudoku</h1>
<table id="sudokuTable">
</table>
<table>
<tr>
<td class="numberSelector">1</td>
<td class="numberSelector">2</td>
<td class="numberSelector">3</td>
<td class="numberSelector">4</td>
<td class="numberSelector">5</td>
<td class="numberSelector">6</td>
<td class="numberSelector">7</td>
<td class="numberSelector">8</td>
<td class="numberSelector">9</td>
</tr>
</table>
<button type="button" onclick="createSudokuTable()">New</button>
</body>
</html>
这是我的 CSS:
td {
border:1px solid black;
width:20px;
height:20px;
text-align:center;
cursor:pointer;
}
.numberSelector {
background-color:blue;
color:yellow;
font-family:Arial,Sans-Serif;
}
.selectedNumber {
background-color:yellow;
color:blue;
}
这是我的 JavaScript:
function createSudokuTable() {
var htmlText = '';
for (var row = 1; row <= 9; row++) {
htmlText += '<tr>';
for (var column = 1; column <= 9; column++) {
htmlText += '<td class="sudokuCell" id="cell_' + row + '_' + column + '"> </td>';
}
htmlText += '</tr>';
}
$('#sudokuTable').html(htmlText);
}
var inputNumber = 1;
function clicked() {
cellId = this.id;
if ($('#' + cellId).text() == inputNumber) {
$('#' + cellId).text(' ');
} else {
$('#' + cellId).text(inputNumber);
}
}
function selectNumber() {
inputNumber = this.innerText;
$('.numberSelector').removeClass('selectedNumber');
$(this).addClass('selectedNumber');
}
$('.sudokuCell').on('click', clicked);
$('.numberSelector').on('click', selectNumber);
顺便用过Zepto :)
任何帮助将不胜感激:) 谢谢!
问题出在这一行:
$('.sudokuCell').on('click', clicked);
您正在为 .sudokuCell
元素的 click
事件附加处理程序,该事件在页面加载时不存在。您必须将事件 处理委托给事件附加时存在的最近的父级。
要解决此问题,请在您的代码中进行以下简单更改:
$('#sudokuTable').on('click','.sudokuCell', clicked);
在这里查看完整的功能代码:JSBIN
在此处了解有关事件委托的更多信息:Understanding Event Delegation