为什么JustGage多次显示

时间:2016-05-21 16:54:33

标签: javascript jquery

我有一个表单,可以将数据保存到mysql数据库,还可以检索一些使用justgage插件显示的变量。

由于某些原因,我无法弄清楚为什么,如果多次按下提交按钮,Gauge将不止一次显示在其上方。

谁能告诉我我做错了什么?

Jquery

$(document).ready(function() {
    $("#message").hide();
    $("#myform").validate({
        submitHandler: function() {
            event.preventDefault();

            var formdata = $("#myform").serialize();
            //Post form data
            $.post('insert.php', formdata, function(data) {
                //Process post response
                //Reset Form
                $('#myform')[0].reset();
                fetchRowCount();
            });
            return false;

        }

    });


    //Fetch data from server
    function fetchRowCount() {
        $.ajax({
            url: 'server.php',
            dataType: "json",
            success: function(data) {
                $("#rows").html(data.rows);
                $("#min").html(data.min);
                $("#max").html(data.max);
                $("#mean").html(data.total);
                $("#last").html(data.last_entry);


                $("#your_results").fadeIn("slow");
                $("#your_data").fadeIn("slow");
                //Scroll to Gauge
                $('html, body').animate({
                    scrollTop: $('#results').offset().top
                }, 'slow');

                //Show gage once json is receved from server

                var gage = new JustGage({
                    id: "gauge",
                    value: data.total,
                    min: data.min,
                    max: data.max,
                    title: "Sample Data"
                });

            }
        });
    }



});

表格

 <!-- Form 1-->
            <div class="form1">

                <form class="form-inline" action="" id="myform" form="" method="post">


                    <!-- Select Basic -->
                    <div class="form-group">
                        <label class="col-md-4 control-label" for="type"></label>
                        <div class="col-sm-3">



                            <select id="type" name="type" class="form-control input-lg" required/>
                            <option value="">a</option>
                            <option value="b">b</option>
                            <option value="c">c</option>
                            </select>
                        </div>
                    </div>
                    <!-- Text input-->
                    <div class="form-group">
                        <label class="col-md-4 control-label" for="cost"></label>
                        <div class="col-sm-3">
                            <input id="cost" name="cost" type="text" placeholder="Cost" class="form-control input-lg" required>

                        </div>
                    </div>
                    <!-- Select Basic -->
                    <div class="form-group">
                        <label class="col-md-4 control-label" for="location"></label>
                        <div class="col-sm-3">
                            <select id="location" name="location" class="form-control input-lg" required>
 <option value="" >Location</option>
      <option value="a">a</option>
      <option value="b">b</option>
      <option value="c">c</option>
    </select>
                        </div>
                    </div>

               <!-- Button -->
                    <div class="form-group">
                        <label class="col-md-4 control-label" for="submit1"></label>
                        <div class="col-md-4">
                            <input type="submit" id="submitButtonId" name="submit" class="btn btn-primary btn-xl" value="Submit">


                        </div>
                    </div>
            </div>
            </form>



  <div id="gauge" class="300x260px"></div>

2 个答案:

答案 0 :(得分:1)

在回调之外存储对指标的引用,因此相同的变量用于所有ajax成功回调。然后,每次创建一个量表,看看它是否已经创建并只刷新它。

我还将多个.html更改为.text。这些似乎是显示值的文本的元素,所以我通过使用.text而不是.html使其更安全。

var gage;    

//Fetch data from server
function fetchRowCount() {
    $.ajax({
        url: 'server.php',
        dataType: "json",
        success: function(data) {
            $("#rows").text(data.rows);
            $("#min").text(data.min);
            $("#max").text(data.max);
            $("#mean").text(data.total);
            $("#last").text(data.last_entry);


            $("#your_results").fadeIn("slow");
            $("#your_data").fadeIn("slow");
            //Scroll to Gauge
            $('html, body').animate({
                scrollTop: $('#results').offset().top
            }, 'slow');

            if (!gage) {
                gage = new JustGage({
                    id: "gauge",
                    value: data.total,
                    min: data.min,
                    max: data.max,
                    title: "Sample Data"
                });
            } else {
                gage.refresh(data.total, data.max);
            }
        }
    });
}

答案 1 :(得分:1)

问题是,每次$ .ajax成功时,你都会创建一个JustGage的新实例,而JustGage每次都会在dom $('#gauge)中添加一个图表,然后它就会重复。

您应该只创建一个JustGage实例,并在每次$ .ajax成功时刷新它。就像这样:

$(document).ready(function() {
  $("#message").hide();
  $("#myform").validate({
    submitHandler: function() {
      event.preventDefault();

      var formdata = $("#myform").serialize();
      //Post form data
      $.post('insert.php', formdata, function(data) {
        //Process post response
        //Reset Form
        $('#myform')[0].reset();
        fetchRowCount();
      });
      return false;
    }
  });

  var gage = new JustGage({
    id: "gauge",
    value: 0,
    min: 0,
    max: 100,
    title: "Sample Data"
  });

  //Fetch data from server
  function fetchRowCount() {
    $.ajax({
      url: 'server.php',
      dataType: "json",
      success: function(data) {
        $("#rows").html(data.rows);
        $("#min").html(data.min);
        $("#max").html(data.max);
        $("#mean").html(data.total);
        $("#last").html(data.last_entry);


        $("#your_results").fadeIn("slow");
        $("#your_data").fadeIn("slow");
        //Scroll to Gauge
        $('html, body').animate({
          scrollTop: $('#results').offset().top
        }, 'slow');

        // Refresh gage once json is receved from server
        gage.refresh(data.total, data.max, {min: data.min});
      }
    });
  }
});

JustGage.prototype.refresh

的用法