2012-04-14 4 views
0

Я пересматриваю этот код, который я сделал год назад с помощью другого человека. К сожалению, я больше не общаюсь с ними, чтобы получить дополнительную помощь. В основном он динамически добавляет классы к tb и b узлам документа, поступающим от namesToChange. Теперь то, что я пытаюсь сделать, это добавить текст в div с узлом класса dtxt, но все равно используйте этот код ниже. Я использую код $('td.pn_adm_jeff').children('div.dtxt').append('zzz');, и он работает, но он постоянно добавляется более одного раза, как показано на фотографии ниже. Как мне заставить его добавить один раз и остановиться?присоединяться к div один раз

Фото http://img6.imageshack.us/img6/5392/7c23ddb145954aefadb1b9f.png

Код

function customizefields(a) { 
     $('td b').each(function() { 
      name = $(this).text(); 
      if (name.indexOf(" ") != -1) { 
       name = name.substring(0, name.indexOf(" ")) 
      } 
      if (a[name]) { 
       this.className = a[name].class; 
       this.parentNode.className = a[name].img 
      } 
     }) 
     $('td.pn_adm_jeff').children('div.dtxt').append('zzz'); 
    } 

    var namesToChange = { 
     'Jeff' :{'class':'pn_adm','img':'pn_adm_jeff'} 
    }; 

    setInterval(function() { 
     customizefields(namesToChange) 
    }, 1000); 

Update

var needsUpdate = true; 

function customizefields(a) { 
    $('td b').each(function() { 
     name = $(this).text(); 
     if (name.indexOf(" ") != -1) { 
      name = name.substring(0, name.indexOf(" ")); 
     } 
     if (a[name]) { 
      this.className = a[name].class; 
      this.parentNode.className = a[name].img; 
     } 
    }); 
    if (needsUpdate) { 
     $('td.pn_adm_jeff').children('div.dtxt').append('testing'); 
     needsUpdate = false; 
    } 
} 

var namesToChange = { 
    'jeff' :{'class':'pn_adm','img':'pn_adm_jeff'}; 
}; 

setTimeout(function() { 
    customizefields(namesToChange); 
}, 1000); 
+1

Где находится '$ ('td.pn_adm_jeff') детей ('') div.dtxt присоединять ('ZZZ');..' В код??? – gdoron

+0

Почему это заслуживает понижения? такие снобы здесь :( –

+0

** А. ** Это супер ** локализованный **, ** B. ** вы не показали нам **, где используется самый важный код **, так что в чем смысл ?. ** C. ** все ответы предложили вам удалить 'setInterval', потому что ** вы не упомянули, что вам нужно его использовать! ** так что да, я отклонил этот вопрос. Извините – gdoron

ответ

1

использование SetTimeout вместо setInterval (интервал для повторения задача таймера, тайм-аут - задание одиночного таймера)

Чтобы предотвратить выполнение определенной задачи более одного раза в повторяющейся задаче, существует простое исправление.

// global variable 
var needsUpdate = true; 

// now in the timer task 
if (needsUpdate) { 
    $('td.pn_adm_jeff').children('div.dtxt').append('zzz'); 
    needsUpdate = false; 
} 

Это работает на вас?

+0

Это не то, что он спрашивает! Его комментарий к удаленному ответу: _ «мне нужно, чтобы setInterval обновлял классы» _ – gdoron

+0

да gdoron прав ii изменить, что он разбивает код и не добавляет классы для узлов 'b' и' tb' –

+0

@gdoron Я обновлю свой ответ – Ozzy

0

Определить глобальную переменную для хранения на вход пометка

var appended = false; 

function appendthestring() { 
    if(!appended) $('td.pn_adm_jeff').children('div.dtxt').append('zzz'); 
    appended = true; 
} 
Смежные вопросы