0

我很久没有用 javascript 编程了,而且我有 Java 背景。我正在尝试在我的代码中使用事件处理程序,但遇到了问题。我有一个 3x3 表,因为我正在制作井字游戏,当用户单击其中一个框时,我想将按钮文本更改为 X。所以我有我的表的 html,按钮是表数据和单击同一功能时,我已将所有按钮分配给所有按钮。单击按钮时,我将其 ID 发送到我的函数,并从那里尝试使用此 ID 参数设置文本,但此时没有发生,我有点困惑为什么不这样做。我还做了一个提示(paramID),paramID 是正确的,所以我不明白发生了什么。任何帮助将不胜感激!这可能是我做的一些愚蠢的事情。我试过firefox和chrome..

这是我的代码:

<table id="tictable" border="1" 

<tr id="row1">
<td><button id="button1" type="button" onclick="actionPerformed(this.id)"</button></td>
<td><button id="button2" type="button" onclick="actionPerformed(this.id)"</button></td>
<td><button id="button3" type="button" onclick="actionPerformed(this.id)"</button></td>
</tr>


<tr >
<td><button id="button4" type="button" onclick="actionPerformed(this.id)"</button></td>
<td><button id="button5" type="button" onclick="actionPerformed(this.id)"</button></td>
<td><button id="button6" type="button" onclick="actionPerformed(this.id)"</button></td>
</tr>


<tr id="row3">
<td><button id="button7" type="button" onclick="actionPerformed(this.id)"</button></td>
<td><button id="button8" type="button" onclick="actionPerformed(this.id)"</button></td>
<td><button id="button9" type="button" onclick="actionPerformed(this.id)"</button></td>
</tr>

</table>

<script type="text/javascript">



function actionPerformed(paramID)
{

    document.getElementById(paramID).value = "X";

}

</script>
4

3 回答 3

2

您需要使用 .innerHTML。

function actionPerformed(paramID)
{
    document.getElementById(paramID).innerHTML = "X";
}

演示在这里

最好的方法是删除所有内联 javascript 并使用它

window.onload = function () {
    var all_buttons = document.querySelectorAll('button');
    console.log(all_buttons);
    for (i = 0; i < all_buttons.length; i++) {
        all_buttons[i].addEventListener('click',function () {
            this.innerHTML = 'X';
        });
    };
};

演示

于 2013-10-04T16:59:58.407 回答
1

你忽略了关闭你的开头<table><button>标签。在进行函数调用时,只需传入this括号并在函数中拉出 id。然后将按钮的内部更新为 X。如果要将外部交换为 X,则必须访问 parentNode,然后更新父级的 innerHTML

<table id="tictable" border="1">
<tr id="row1">
<td><button id="button1" type="button" onclick="actionPerformed(this)">&nbsp;</button></td>
<td><button id="button2" type="button" onclick="actionPerformed(this)">&nbsp;</button></td>
<td><button id="button3" type="button" onclick="actionPerformed(this)">&nbsp;</button></td>
</tr> 
<tr >
<td><button id="button4" type="button" onclick="actionPerformed(this)">&nbsp;</button></td>
<td><button id="button5" type="button" onclick="actionPerformed(this)">&nbsp;</button></td>
<td><button id="button6" type="button" onclick="actionPerformed(this)">&nbsp;</button></td>
</tr>
<tr id="row3">
<td><button id="button7" type="button" onclick="actionPerformed(this)">&nbsp;</button></td>
<td><button id="button8" type="button" onclick="actionPerformed(this)">&nbsp;</button></td>
<td><button id="button9" type="button" onclick="actionPerformed(this)">&nbsp;</button></td>
</tr>
</table>

    <script type="text/javascript">

    function actionPerformed(domObj)
    {
        domObj.innerHTML = "X";
    }

    </script>

我只是将它复制到一个jsfiddle中并且它有效

于 2013-10-04T17:12:50.527 回答
1

塞尔吉奥所说的,加上你所有的按钮:

<button id="button1" type="button" onclick="actionPerformed(this.id)"</button>

应该:

<button id="button1" type="button" onclick="actionPerformed(this.id)"></button>

看到失踪了>吗?

于 2013-10-04T17:04:45.853 回答