如何在树中的所有节点上运行一些代码?

时间:2009-03-11 06:13:02

标签: javascript jquery

我希望在我的所有treeView节点上运行一些代码,具体取决于从数据库返回的值,并重复此操作直到返回某个值。

我在想:

  1. 为我的所有树节点提供相同的css类,以便我可以从JQuery
  2. 访问它们
  3. 我的JQuery函数中有一个计时器,它使用ajax转到数据库,当返回某个值然后停止计时器
  4. 这里有两个问题。如何为每个节点运行我的函数以及如何在JavaScript中执行计时器,因此:

    $(function(){
        $('cssClassOfAllMyNodes').WhatFunctionToCallHere?((){

    //How do I do Timer functionality in JavaScript? ForEachTimeInterval { //use Ajax to go to database and retrieve a value AjaxCallBackFunction(result) { if (result = 1) //How to stop the timer here? } } });

    });

    希望我很清楚。非常感谢


    非常感谢答案。我希望你对设计发表评论。

    基本上我正在尝试实现的是Windows Wokflow类型功能,其中我树中的每个节点根据其状态更新其映像,其状态来自使用树节点唯一的密钥查询数据库。如果您有任何其他方法,我愿意接受其他方法。再次感谢

2 个答案:

答案 0 :(得分:3)

如果没有评论您的设计,您可以参考这些

$.each()

setTimeout()setInterval()

答案 1 :(得分:1)

你可以这样做:

$(function(){
  $('cssClassOfAllMyNodes').each(function (){
    // Do something with "this" - "this" refers to current node.
  });
});

在JS中处理计时器的正确方法是引用每个超时或间隔,然后清除它们。

它们之间的区别是:

  • 超时只会运行一次,除非之前停止;
  • 间隔将无限期地运行,直到停止。

所以你可以这样做:

var delay = 2000; // miliseconds
var timer = setTimeout("functionToBeCalled", delay);
clearTimeout(timer); // whenever you need.

请注意,您可以使用要调用的函数的名称将字符串传递给setTimeout(与setInterval相同)。或者您可以传递对函数本身的引用:

var callback = function () { alert(1); };
var timer = setTimeout(callback, delay);

请确保不要为AJAX请求设置间隔,因为您的响应可能会延迟,并且对服务器的连续调用最终可能会重叠。

相反,你应该调用setTimeout,当答案到达时再调用setTimeout。