You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:使用setInterval刷新DIV后jQuery Knob无法显示的解决办法

jQuery Knob刷新容器后无法正常渲染的解决办法

问题场景

在智能家居可视化项目中,使用jQuery Knob实现供暖温度调节功能,通过setInterval每秒刷新包含该Knob的<div>容器,但刷新后原本的Knob控件消失,仅显示原生输入框。

刷新前效果:
刷新前的Knob

刷新后效果:
刷新后的状态

当前代码如下:

JavaScript代码

$(document).ready(
  function() {
    setInterval(function() {
      $("#schalter").load(" #schalter > *");
    }, 1000); //Delay here =  seconds
  });

$(".knobID").knob({
  'release': function(sendpostresp) {
    $.ajax({
      url: "publish.php",
      type: "POST",
      data: {
        foo: sendpostresp,
        test: '123'

      },
      success: function(result) {
        alert(result);
      }
    });
  }
});

HTML结构

<div class="schalter" id="schalter">
  <input type="text" data-angleoffset=-125 data-anglearc=250 data-fgcolor="#66EE66" value="22" class="knobID" data-step=".5" data-min="0" data-max="30">
</div>

问题原因

$(".knobID").knob()仅在页面初始加载时执行一次,仅对当时存在的DOM元素生效。而load()方法会替换容器内的DOM结构,新生成的输入框没有被调用knob()方法初始化,所以无法渲染成Knob控件。

解决方案

需要在每次load()完成后,重新初始化新的Knob控件。修改setInterval内的逻辑,利用load()的回调函数,在DOM更新完成后执行knob()初始化:

$(document).ready(function() {
  // 定义初始化Knob的函数,方便复用
  function initKnob() {
    $(".knobID").knob({
      'release': function(sendpostresp) {
        $.ajax({
          url: "publish.php",
          type: "POST",
          data: {
            foo: sendpostresp,
            test: '123'
          },
          success: function(result) {
            alert(result);
          }
        });
      }
    });
  }

  // 页面加载时先初始化一次
  initKnob();

  // 每秒刷新并重新初始化
  setInterval(function() {
    $("#schalter").load(" #schalter > *", function() {
      // 加载完成后回调,重新初始化Knob
      initKnob();
    });
  }, 1000);
});

优化建议

  • 频繁的每秒刷新会增加服务器请求压力,建议改为按需刷新(比如后端推送更新时再刷新,或检测到温度值变化时才更新),可以使用WebSocket或长轮询方式替代固定间隔的load()。
  • 如果仅需要更新温度数值,无需刷新整个DOM,直接通过$(".knobID").val(新数值).trigger('change')更新Knob的值即可,避免DOM重建带来的性能损耗和控件初始化问题。

内容的提问来源于stack exchange,提问作者sebahier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:50:17