使用JQuery更改CSS中进度条的“宽度”

Changing 'width' of the progress bar in CSS with JQuery

我正在学习JQuery,我想我无法理解一些基础知识。 每次单击其中一个单选按钮时,我都会尝试将进度条的宽度(就像它正在移动一样)更改为+ 2%。 但我的功能是错误的(值+ 2)。 我将不胜感激任何评论。 当我将它改为某个固定值时,它并不会真的像那样。 我想'改变方法'每次都会初始化整个事物。 所以我的问题是将结果写入文件的最佳方法是什么(我现在使用'submit'做什么)并同时增加进度条的'width'值? 任何评论都非常感谢。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<html>
<style>
#myProgress {
  width: 100%;
  background-color: #ddd;
}

#progressbar {
  width: 2%;
  height: 30px;
  background-color: #1D1387;
  text-align: center;
  line-height: 30px;
  color: white;
}
</style>
    <head>
        <script src='http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js'>
         
 $(document).ready(function() {  
   $('input[name=score]').change(function(){  
        $('form').submit();
        <!-- progress bar moves on 2% every time the radio button is clicked (form is submitted)-->
        $('#progressbar').css('width', function(index, value){
        return value + 2;
        });
   });  
  });  

    </head>

<form>
<p>
Please select one of the variants below:
</p><br />
word
<br />
<input type="hidden" name="word" value="{{ word }}"/><br />
<label class="rad"><input type="radio" name="score" value="var1" />variant1</label>
<label class="rad"><input type="radio" name="score" value="var2" />variant2</label>
<label class="rad"><input type="radio" name="score" value="var3" />variant3</label>
<label class="rad_other"><input type="radio" name="score" value="var4" />variant4</label><br />
<br />
</form>

  0/50

</body>
</html>


如果您提交表单,则表示您正在加载新页面(即使它是同一页面)并且丢失了进度条更改。

如果删除submit()并更改增加宽度的方式,则代码可以正常工作:

1
2
3
4
5
$('input[name=score]').change(function(){
    $('#progressbar').css('width', function(index, value){
        return"+=2%";
    });
});

您的请求的解决方案是使用一些Ajax并执行POST请求(请参阅jQuery post())。在SO上有一个问题,你可以在哪里找到这样做的方法:如何使用jquery $ .post()方法提交表单值

另一种解决方案是在生成页面时使用后端语言设置进度条宽度,并跟踪每个请求的进度。


首先,您在JavaScript中使用HTML注释(),它使用///* ... */注释。

其次,阅读css(...)的文档,您将看到提供给函数的值可能与样式表中的值不在同一个单元中。在函数中放入一个简单的console.log(value),我们看到它以像素为单位获取值。

这是一个有效的例子。我更改了注释并将百分比放在变量中。我不得不删除form.submit()以使JSFiddle工作,但你可以保留它。