【问题标题】:Update function because variable value changed?更新函数,因为变量值改变了?
【发布时间】:2017-07-12 13:04:52
【问题描述】:

是否有必要在已更改的变量上更新函数?我不知道如何正确解释这一点,但我会在下面尽力而为。

我有一个 .click() 函数,如果文档准备好,它会被初始化。这个函数内部是一个 .animate() 函数,它使用一个变量(var content)作为选择器。如果文档准备就绪,也会定义此变量。 (下面是代码的简化版本)

$('.selector').click(function () {
   $(content).animate({
       scrollTop: target.offset().top
   }, 1000);
   return false;
});

但是这个变量会根据视口宽度在两个值之间变化。 (下面是代码的简化版本)

if(viewportWidth < 768){
    content = $('.content-wrap');
}else{
    content = $('html, body');
}

所以如果变量值发生变化,我是否必须更新或重新初始化我的函数? 因为它不适用于其中一个选择器。

感谢您的帮助或任何思考。 :)

=============更新=============

好吧,它仍然没有像预期的那样工作。

$(content).scroll(function() {
    console.log($(this));
}

如果变量(内容)的值发生了变化,这将不起作用。如果文档准备好了,它只适用于为此变量设置的值。

【问题讨论】:

  • 但是如果用户手动调整窗口大小怎么办?最好检查这种情况下单击事件处理程序中的宽度
  • 您需要在调整窗口大小时更新变量。或者更好的是,只需在动画之前调用按钮单击处理程序中更新变量的函数。
  • @charlietfl 是的,我知道。上面的代码被简化了。有一个 resize 函数可以改变变量。
  • @freedomn-m 见上面的评论。
  • 您认为它们与使用变量时相同 :) 我认为它们与一个人说的“按现状使用此变量”不同,另一个人说“按原样使用此变量”在我需要的时候定义”。在第一种情况下,更改变量不会更新滚动处理程序分配,因为这已经发生了 - 这是更新中的滚动事件。第二种情况起作用,因为它使用点击时定义的变量。

标签: javascript jquery function initialization


【解决方案1】:

您不必更改函数中的任何内容,因为content 的值将在click 事件发生时被读取。

只要content 变量定义在代码库的两个位置范围内,您所拥有的一切都将正常工作。

您应该注意content 本身将是一个jQuery 对象,因此您不需要在点击处理程序中再次包装它;只需 content.animate({... 即可。

【讨论】:

  • 感谢您提供此信息。我一直在寻找这样的答案。你给了决定性的小费。我的问题是该变量已经是一个 jquery 对象。谢谢。
【解决方案2】:

您已经将变量定义为选择器,因此无需编写 $(content) 您可以编写以下代码以正确执行。

if(viewportWidth < 768){
 content = $('.content-wrap');
 content.animate({scrollTop: target.offset().top}, 1000);
}else{
 content = $('html, body');
 content.animate({scrollTop: target.offset().top}, 1000);
}

【讨论】:

  • $($($($("#id")))$('#id') 相同 - 如果您将 jquery 对象包装在 $() 中,则不会产生影响。你没有需要,但你可以
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
相关资源
最近更新 更多