代码之家  ›  专栏  ›  技术社区  ›  Nick Hofmann

创建数独网格(Javascript和HTML)将不允许输入单元格

  •  1
  • Nick Hofmann  · 技术社区  · 7 年前

    但是,当我点击底部的一个数字,然后点击一个单元格,这样数字就可以进入单元格,它就不起作用了。(我双击,表示我已经点击了它)

    我选择了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;
    }
    

    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 + '">&nbsp;</td>';
            }
            htmlText += '</tr>';
        }
        $('#sudokuTable').html(htmlText);
    }
    var inputNumber = 1;
    function clicked() {
        cellId = this.id;
        if ($('#' + cellId).text() == inputNumber) {
            $('#' + cellId).text('&nbsp;');
        } else {
            $('#' + cellId).text(inputNumber);
        }
    }
    
    
    
    function selectNumber() {
        inputNumber = this.innerText;
        $('.numberSelector').removeClass('selectedNumber');
        $(this).addClass('selectedNumber');
    }
    
    $('.sudokuCell').on('click', clicked);
    $('.numberSelector').on('click', selectNumber);
    

    任何帮助都将不胜感激:)谢谢!

    1 回复  |  直到 4 年前
        1
  •  3
  •   abhishekkannojia    7 年前

    问题在于这一行:

    $('.sudokuCell').on('click', clicked);
    

    click 的事件 .sudokuCell 加载页面时不存在的元素。你必须这么做 委派活动 处理到事件附件时存在的最近的父级。

    $('#sudokuTable').on('click','.sudokuCell', clicked);
    

    在此处检查完整的功能代码: JSBIN

    在此处了解有关活动委派的更多信息: Understanding Event Delegation