0

我有一个下载页面,每个文件的最大下载次数为 5。每个下载都链接到 download.php?fileid。单击时,下载次数在数据库中减去 1。但它仅在访问者刷新页面时更新。

现在,我认为 jQuery 会帮助我,我现在有了这个:

<span class="downloadsleft">5</span><span class="downloadLink">download file</span>

我的jQuery:

<script type="text/javascript">     
                $('.downloadLink').click(function() {

                        var currentValue = $(".amount").text();
                        var newValue = +currentValue - 1;

                        $(".amount").text(newValue);

                        window.open("download.php?file={/literal}{$product.bestandsnaam_hash}{literal}");                   

                        if ((".amount").text == "1")
                        {
                            location.reload();
                        };
                });  

            </script>

窗口打开工作,但重新加载不起作用?有谁知道这个问题?

4

2 回答 2

2

您在文本中缺少 ()

 if ((".amount").text() == "1")

您不需要使用查询再次获取信息,它已经在 var newValue 中:

 if (newValue == 1)

编辑:您的代码仅适用于页面中的一次下载,因为您对所有下载使用相同的“.amount”(我假设您的意思是“.downloadsleft”)。一种解决方案是使用前一个元素而不是按类定位元素:

$('.downloadLink').click(function() {
      var counter = $(this).prev();
      var newValue = counter.text() - 1;
      counter.text(newValue);
      window.open("download.php?file={/literal}{$product.bestandsnaam_hash}{literal}");                   
      if (newValue == 1) {
          location.reload();
      };
}); 
于 2013-06-12T14:21:20.990 回答
1

解释

.amount不是好听的班级名字!改用.downloadsleft

由于.amount不存在,因此没有为变量设置初始值currentValue


解决方案

( JSFiddle )

.amountJavaScript代码中的所有内容替换为.downloadsleft

注意:我还添加了一个parseInt()函数base10来将下载次数与数字进行比较。

JavaSript/jQuery

  $('.downloadLink').click(function() {
      var currentValue = $(".downloadsleft").text();
      var newValue = currentValue - 1;

      $(".downloadsleft").text(newValue);

      window.open("download.php?file={/literal}{$product.bestandsnaam_hash}{literal}");                

      if (parseInt(newValue,10) == 1)
      {
          location.reload();
      };
  }); 
于 2013-06-12T14:25:46.730 回答