Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 导致按钮出现问题的If-else语句 更新#1-澄清问题,新的工作链接。 实时链接:_Javascript_Jquery_If Statement - Fatal编程技术网

Javascript 导致按钮出现问题的If-else语句 更新#1-澄清问题,新的工作链接。 实时链接:

Javascript 导致按钮出现问题的If-else语句 更新#1-澄清问题,新的工作链接。 实时链接:,javascript,jquery,if-statement,Javascript,Jquery,If Statement,我试图解决的问题在于页面右栏中表单按钮的if-else语句。向下滚动标题和导航栏,查看问题所在执行以下操作时会出现问题: 单击其中一个表单按钮,单击其他表单按钮,然后取消选择在countup.js完成之前单击的第二个按钮 最终目标 当没有选择任何表单按钮时,“您的出价将是”下的数字应该是三个hypens的字符串--,表示没有值 相反,.new\u amount的数字倒计时,HTML成为totalAmount的值,这是我不希望发生的 scripts.js index.html(仅按钮)

我试图解决的问题在于页面右栏中表单按钮的if-else语句。向下滚动标题和导航栏,查看问题所在执行以下操作时会出现问题:

  • 单击其中一个表单按钮,单击其他表单按钮,然后取消选择在
    countup.js
    完成之前单击的第二个按钮
最终目标
  • 当没有选择任何表单按钮时,“您的出价将是”下的数字应该是三个hypens的字符串
    --
    ,表示没有值

  • 相反,
    .new\u amount
    的数字倒计时,HTML成为
    totalAmount
    的值,这是我不希望发生的

scripts.js index.html(仅按钮)

第一步

从下面的金额中选择一个添加到当前出价中

$10 $25 $50 $100 $250 $500

上一次出价是

---

您的出价将

$ ---
问题很简单:countup方法会一直运行并更新值,即使您将其重置为“---”

幸运的是,解决方案也非常简单。在
$('.total\u amount').html(“--”)之前添加以下行

if (count.typeof == "object") {   // just checking if the count object actually exists.
 count.pauseResume();
 count.reset();
}
为了使其工作,您必须使count对象全局可用。因此,改变这一行:

  var count = new CountUp("count", 0, totalAmount, 0, 1.5, options);
对此:(只需删除“var”)

比较如下:

那你应该表现得很好


注意:我从countup.js文件派生的count对象的方法。

问题与
if
/
else
条件无关

问题是,计数插件正在覆盖文本(因为在
if
/
else
条件中设置文本后,它仍在执行)

根据,
.start()
方法接受一个函数作为回调函数,该函数将在动画结束时执行

因此,最简单的解决方法是检查回调中是否有任何选定的按钮元素。如果没有任何选定元素,则将
.total\u amount
的文本设置为
--

var count = new CountUp("count", 0, totalAmount, 0, 1.5, options);
count.start(function() {
  if ($('.button__form.is-selected').length === 0) {
    $('.total__amount').text("---");
  }
});
counterArray.forEach(function (count) {
  if (count && count.reset) {
    count.reset();
  }
});

$('.total__amount').text("---");

或者,您也可以创建
count
对象的数组

在下面的代码段中,有一个
计数器数组
数组,它包含每个
计数
对象

if
语句中,在
设置
的文本之前,对数组中的每个
对象使用
.reset()
方法

var count = new CountUp("count", 0, totalAmount, 0, 1.5, options);
count.start(function() {
  if ($('.button__form.is-selected').length === 0) {
    $('.total__amount').text("---");
  }
});
counterArray.forEach(function (count) {
  if (count && count.reset) {
    count.reset();
  }
});

$('.total__amount').text("---");
以下是相关代码和一个示例

(为了简洁起见,删除了不相关的代码)


你应该做一个JSFIDLE。@Mark这是一个JSBin:对不起,我现在花了15分钟试图理解你的问题,但我仍然不能。你能提供更多的细节吗?此外,在JSBin中,countup.js不包括在内。因为这与问题有关,所以包含countup代码将非常有帮助。@Gabrielmachts我已经澄清了问题,并添加了一个包含countup.js的链接。希望您现在能够看到问题。@Mark我已经更新了问题并提供了一个工作链接。您答案的第二部分非常有用。只是等了10个小时才悬赏。尽管第一个答案很简单,但问题在于它会在一段时间内闪烁
totalAmount
的值几秒钟,然后将文本更改为占位符“---”文本。
counterArray.forEach(function (count) {
  if (count && count.reset) {
    count.reset();
  }
});

$('.total__amount').text("---");
var baseAmount = 0;
var totalAmount = baseAmount;
var counterArray = [];

$('.button__form').on('click', function() {
  if ($(this).hasClass('is-selected')) {
    // ....

    counterArray.forEach(function (count) {
      if (count && count.reset) {
        count.reset();
      }
    });

    $('.total__amount').text("---");
  } else {
    // ....

    $(function() {
      var options = {};
      var count = new CountUp("count", 0, totalAmount, 0, 1.5, options);
      count.start();
      counterArray.push(count);
    });
  }
});