【问题标题】:simple loop with append() doesn't work带有 append() 的简单循环不起作用
【发布时间】:2015-06-05 14:11:17
【问题描述】:

函数StartScan() 通过单击按钮调用,addDevices() 动态创建输出。我希望此输出每 2 或 5 秒自动更新一次。

在控制台中,我看到函数 StartScan() 自动重新加载,所以值在那里,我只是将 addDevice() 函数放入循环中。

我哪里错了?

function startScan()
{
    var paramsObj = {serviceUuids:[]};

    console.log("Start Scan : " + JSON.stringify(paramsObj));

    bluetoothle.startScan(startScanSuccess, startScanError, paramsObj);

    return false;
}

function startScanSuccess(obj)
{
    console.log("Start Scan Success : " + JSON.stringify(obj));     

    if (obj.status == "scanResult")
    {
        console.log("Scan Result");

        addDevice(obj.address, obj.name, obj.rssi);
    }
    else if (obj.status == "scanStarted")
    {
        console.log("Scan Started");
    }
    else
    {
        console.log("Unexpected Start Scan Status");
    }
}

function addDevice(address, name, rssi)
{
        var $devices = $(".devices");

        var $check = $devices.find("li[data-address='{0}']".format(address));

        if ($check.length > 0)
        {
            return;
        }
        var template = $("#device").text().format(address, name, rssi);

        $devices.append(template);
        $devices.trigger("create");

        window.setTimeout(50000);
        console.log("Loop: " + i);

        if (rssi < -100){   
            alert(name + " lost proximity");
        }

        setInterval( function(){ addDevice(adress, name, rssi);}, 2000);    
}

【问题讨论】:

  • 如果您使用的是 jQuery,请将标签添加到您的问题中。
  • 什么是format()?你确定它返回 jQuery 对象吗?
  • 注意:setTimeout() 期望函数与超时一起调用。它不等同于暂停当前线程的sleep() 函数,从而延迟后续代码。它只是延迟调用提供给它的函数。
  • setTimeout(50000) 完全没用。 Javascript 是异步的,它会启动超时并在此期间继续执行代码,同时超时计数。
  • 你可能正在寻找类似的东西:stackoverflow.com/questions/8663246/javascript-timer-loop

标签: javascript jquery loops jquery-mobile


【解决方案1】:

我相信你想要:

function addDevice(address, name, rssi)
{
        var $devices = $(".devices");
.....   
}

setInterval( addDevice, 2000); // without arguments
setInterval( function(){ addDevice(address, name, rssi) }, 2000); // with arguments

这将每 2 秒启动一次addDevice 函数。

【讨论】:

  • 定义“不工作”。这是非常模糊的。您在控制台中有错误吗?如果你 console.log 的东西怎么办?你怎么知道函数是否被调用?等
  • console.log 中没有错误,通过 console.log("Start Scan : " + JSON.stringify(paramsObj)) 我在控制台上看到的正是我想要的在屏幕上看到。 addDevice 函数被调用一次,但我希望它像 startscan 函数一样重复。
  • 我在代码中添加了一个变体来启动带参数的函数,试试这个?
  • 您不必感到抱歉。但正如我之前所说,“它不起作用”根本没有帮助。它只是告诉我它不工作,并且没有提供有关如何调试它并使其工作的线索。
  • 什么都没有改变 - 就像它忽略了 setInterval(),但仍然没有错误,并且应用程序像以前一样工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 2015-03-14
  • 2016-01-31
  • 2015-02-22
相关资源
最近更新 更多