.hide() 方法不作用于变量

.hide() Method not acting on variables

提问人:Caleb Nugent 提问时间:11/9/2022 最后编辑:Professor AbronsiusCaleb Nugent 更新时间:6/29/2023 访问量:49

问:

我正在尝试使用 .hide() 方法在单击时隐藏元素。在下面的代码中,当我按 ID 专门选择 object1 时,我可以隐藏它。我将元素存储在变量中,但是当我在变量上使用hide()时,它不起作用。为什么当我使用变量时该方法不起作用,但在我专门选择它时工作得很好?

代码如下:

<div id="object1">Object 1</div>
<div id="object2">Object 2</div>
<input type="button" id="button" />

<script>
  $(document).ready(() => {

      const object1 = $('#object1');
      const object2 = $('#object2');
      const button = $('button');
  });

  button.addEventListener("click", () => {
      $('#object1').hide();
  });

</script>

当我使用以下代码(将$('#object1')替换为其变量)时,代码不会执行。


  $(document).ready(() => {

      const object1 = $('#object1');
      const object2 = $('#object2');
      const button = $('button');
  });

  button.addEventListener("click", () => {
      object1.hide();
  });

是我做错了什么,还是JS在这方面有限制?

编辑:

即使将事件侦听器移动到文档中,代码仍未执行。这是最新的代码

<div id="object1">Object 1</div>
<div id="object2">Object 2</div>
<input type="button" id="button" />


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>


<script>
    $(document).ready(() => {
        const object1 = $('#object1');
        const object2 = $('#object2');
        const button = $('#button');

        button.addEventListener("click", () => {
            object1.hide();
        });
    });
</script>
JavaScript HTML jQuery 变量 隐藏

评论

0赞 M.Ismail 11/9/2022
object1 不在 $(document).ready 中。只需在关闭函数之前移动它即可。

答:

0赞 Juan Solano 11/9/2022 #1

这是一个闭包问题。单击函数的作用域不知道 object1。 您有两种选择:

选项 1:将事件侦听器移动到文档中。我个人会选择此选项,因为它可以避免污染窗口对象

  $(document).ready(() => {
    const object1 = $('#object1');
    const object2 = $('#object2');
    const button = $('button');

    button.addEventListener("click", () => {
      object1.hide();
    });
  });

选项 2:将变量移到外面,以便所有方法都可用。

  let object1 = null;
  let object2 = null;
  $(document).ready(() => {
    object1 = $('#object1');
    object2 = $('#object2');
    const button = $('button');
  });

  button.addEventListener("click", () => {
    object1.hide();
  });