将 Javascript 与 HTML 分开

Separating Javascript from HTML

在 DIV 中有如下 js:onclick、onkey down 等。我如何在新的 javascript 文件上设置它而不丢失功能。我已经有一个外部 js 文件。我想在其中添加 'onclick' 内容。但我不确定该怎么做,以及如何让它发挥作用。

有人可以帮助我吗?

<!DOCTYPE html>
<html>
<head>
  <title>Page Title</title>

  <link rel="stylesheet" type="text/css" href="raad.css">

</head>

<body>
  <h1>This is a Heading</h1>
  <p>This is a paragraph.</p>

  <div id="container">

<h1>Raad het goede nummer!</h1>

    <div id="message_txt"></div>
    <form id="userInput" name="userInput" method="post">
        <input id="input_txt" name="limitedtextfield" type="text" onKeyDown="limitText(this.form.limitedtextfield,3);" onKeyUp="limitText(this.form.limitedtextfield,3);" maxlength="3">
        <br />
        <button id="guess_btn" type="button" onclick="guessNumber()">RAAD</button>
        <br />
        <button id="playAgain_btn" type="button" onclick="initGame()">OPNIEUW</button>
    </form>
</div>

<script type="text/javascript" src="raad.js"></script>

</body>

</html>

您可以在 javascript 文件上执行类似的操作:

document.getElementById("guess_btn").onclick = function() {guessNumber()};

function guessNumber() {
    ......
}

然后对其他事件执行相同的操作。

希望对您有所帮助。

您可以使用 addEventListener.

将所有事件处理程序属性从 HTML 移动到 JS 中

所以,例如,这个:

<input id="input_txt" name="limitedtextfield" type="text" onKeyDown="limitText(this.form.limitedtextfield,3);" onKeyUp="limitText(this.form.limitedtextfield,3);" maxlength="3">

应该变成这样:

HTML

<input id="input_txt" name="limitedtextfield" type="text" maxlength="3">

JS

var input_txt = document.getElementById('input_txt');

input_txt.addEventListener('keydown', function(e){
    limitText(this.form.limitedtextfield,3);
});
input_txt.addEventListener('keyup', function(e){
    limitText(this.form.limitedtextfield,3);
});

理想情况下,您可以使用通用函数进行回调,如下所示:

function handleInputKeys() {
    limitText(this.form.limitedtextfield,3);
}

然后只需:

input_txt.addEventListener('keyup', handleInputKeys);

下一个例子,这个:

<button id="guess_btn" type="button" onclick="guessNumber()">RAAD</button>

应该是:

HTML

<button id="guess_btn" type="button">RAAD</button>

JS

var guess_btn = document.getElementById('guess_btn');

guess_btn.addEventListener('click', guessNumber);

等...

在这种情况下,如果您想将 "onclick" 等事件添加到您的 javascript 文件中,而不是只在 HTMl 中编码该事件,您可以在 javascript 中使用事件 handler/listener。本质上,您在将执行操作的对象上设置一个侦听器,然后您将处理执行该操作后要执行的操作。

查看 this 上一个问题。

希望对您有所帮助!

没问题,您首先必须访问要操作的元素。我建议使用 jQuery,它使 DOM-Manipulation 方式对于初学者来说更容易理解。

所以:获取 jQuery here 并将其放入您的网络服务器,以便可以找到它。在你的 HTML 中引用它,像这样:

<script type="application/javascript" src="js/jquery-1.11.2.js"></script>

如果您在 jquery 之后加载您的 javascript-文件,您应该可以访问 jQuery-Object ($).

(现在的一切,都应该写在你的js文件中)

第二个任务:初始化。要正确初始化您的代码,您必须确保网站上的所有内容都已加载。这是通过等待特定事件(绑定到 documentready 事件)来完成的。

$(document).on('ready', function(){
   // here goes the init-code
});

on(...)-Statement 中的函数称为回调,在事件触发后进行计算。

您可以通过 id 属性访问您的元素。例如。 $('#input_txt') 引用 ID 为 'input_txt' 的输入元素。 $ 是 jQuery-Object,而 '#input_txt' 是所谓的选择器。选择器可以明确地引用元素。

最后,这是您真正想要的:操纵事件,绑定到您的特定元素。这是通过 jQuery-方法 'on' 完成的。我们使用它来等待文档处于 'ready' 状态。现在我们用它来等待特定元素上的特定事件。

每次单击元素时,都会触发 'click'-事件。 'keyup' 和 'keydown' 等效,如果用户按下或释放键盘,当焦点位于元素上时,将触发事件。请记住:如果事件被触发并且回调函数(在此上下文中通常称为 'Handler')绑定到它,将评估相应的函数。

$(document).on('ready', function(){
   $('#input_txt').on('keydown', function({
       limitText(this.form.limitedtextfield,3);
   })
   .on('keyup', function({
       limitText(this.form.limitedtextfield,3);
   });

   $('#guess_btn').on('click', function({
       guessNumber();
   });

   $('#playAgain_btn').on('click', function({
       initGame();
   });
});