无法将实际值分配给jQuery UI Progress栏

时间:2013-12-20 11:14:53

标签: jquery html jquery-ui jquery-ui-progressbar

我遇到了jQuery UI Progress栏的问题。我的页面上有多个进度条(对于表示多步进度的堆叠进度条),我有以下代码来启动进度条并分配值:

function createProgressBars(progressVal, progressValMax, callback) {

progressVal = $(this).data("progress-value");
progressValMax = $(this).data("progress-val-max");

$(".progress-bar").progressbar({
    value : progressVal,
    max : progressValMax
});

callback();}
jQuery(function($){
$(document).ready(function(){

    $(".progress-bar").each(function(){
        var pv = $(this).data("progress-value"),
            pm = $(this).data("progress-max");

        createProgressBars(pv, pm);
    });
});
});

编辑:添加了HTML代码

<div class="progress-bar regular-user" data-progress-value="1000" data-progress-max="3000"></div>

<div class="progress-bar bronze-user" data-progress-value="500" data-progress-max="2000"></div>

<div class="progress-bar silver-user" data-progress-value="300" data-progress-max="2000"></div>

<div class="progress-bar gold-user" data-progress-value="200" data-progress-max="3000"></div>

但在HTML属性中,我有aria-value-max=100aria-value-now=0

如何正确指定这些值?我有一个进度条(实际上只有一个)的相同经验,它工作正常。

谢谢你们。

2 个答案:

答案 0 :(得分:1)

你在createPogressBar中做的第一件事就是用this覆盖两个参数,这两个参数在那一点上没有指向任何东西。 你可能会这样做:

jQuery(function($){
$(document).ready(function(){

    $(".progress-bar").each(function(){
        var pv = $(this).data("progress-value"),
            pm = $(this).data("progress-max");

       $(this).progressbar({
          value : pv,
          max : pm
       });
    });
});

或者通过仅发送createProgressBar参数将代码移至this功能。

function createProgressBars(container, callback) {

progressVal = $(container).data("progress-value");
progressValMax = $(container).data("progress-val-max");

$(container).progressbar({
    value : progressVal,
    max : progressValMax
});

callback();}
jQuery(function($){
$(document).ready(function(){

    $(".progress-bar").each(function(){
        createProgressBars(this);
    });
});

编辑: 我更新了两个代码。在第一种情况下,我们需要使用this来创建正确的进度条,而不是常规选择器。

在第二种情况下,我们需要使用容器。

不这样做会尝试每次重新生成所有进度条,这会导致奇怪的效果。

答案 1 :(得分:0)

你正在设置pv和pm,将它传递给函数,然后基本上重新计算函数内的那些值。我想你应该摆脱这些界限:

progressVal = $(this).data("progress-value");
progressValMax = $(this).data("progress-val-max");