2013-09-13 5 views
0

У меня есть 3 диаграммы, которые мне нужно перерисовать.Включить оператор if в цикл

Это код, который я должен сделать одно:

var arrOfChartContainers = ["TopLeft","TopRight","BottomLeft"]; 


var myAutoRefresh = setInterval(function(){ 
    if($("#TopLeft_chartConfig").css("display")==="none"){ 
     drawChart("TopLeft"); 
    }else{ 
     clearInterval(myAutoRefresh); 
    } 
},3000); 

Я не хочу, чтобы сделать копию это еще 2 раза и перерисовывать мои две другие диаграммы. Как я могу прокручивать свои диаграммы, если я хочу сделать все три одновременно на интернале?

+0

использовать функцию .each() на массиве? – Eugene

+1

Вы пробовали цикл? В чем была ваша проблема? Должен ли интервал останавливаться, когда все три рисуются тогда? – Bergi

+0

Извините, моя проблема в том, что я не знаю, как это сделать. Я очень новичок в кодировании. Интервал должен продолжаться, мне нужно, чтобы все графики постоянно обновлялись, чтобы создать впечатление от обновлений в реальном времени. – Batman

ответ

2

Использование $.each:

$.each(arrOfChartContainers, function(index, entry) { 
    $("#" + entry + "_chartConfig").doSomethingWithItHere(); 
}); 

т.д .:

$.each(arrOfChartContainers, function(index, entry) { 
    var $chart = $("#" + entry + "_chartConfig"); 
    if ($chart.css("display") === "none") { 
     drawChart(entry); 
    } 
}); 

Возможно стоит изменения drawChart принять объект JQuery напрямую, а не использовать имя косвенно.

+0

«Возможно, стоит изменить drawChart, чтобы сразу принять объект jQuery». Я не уверен, что знаю, что вы имеете в виду. – Batman

+1

@Batman: Ну, в вашем исходном коде вы передаете строку «TopLeft» в 'drawChart'. Я понятия не имею, что делает ваша drawChart с этой строкой, но в вашем другом коде эта строка является * частью * значения 'id', которое вы используете для поиска элемента и получения для него объекта jQuery. Поэтому я решил, что имеет смысл передать этот объект в 'drawChart'. Или нет, конечно, в зависимости от того, что он делает. –

+0

Ну, если мы зацикливаемся, и я думаю, что «запись» - это объект jQuery, нам не удастся передать строку в drawChart, если мы передадим строку, она всегда будет перерисовывать диаграмму, но 3 раза. Это то, что он делает https://developers.google.com/chart/interactive/docs/drawing_charts#drawchart – Batman

1

HTML: Добавить класс в элементы диаграммы, чтобы разместить ниже js.

JS:

$('.someuniversalchartclass').each(function(){ 
    ($(this).hasClass('ninja')) ? drawChart($(this)) : clearInterval(myAutoRefresh); 
});  

CSS:

.ninja { 
    display:none; 
} 
+1

Возможно, вы должны подробно объяснить, например, сказать, что «someuniversalchartclass» необходимо добавить к каждому объекту диаграммы и т. Д. В любом случае «ниндзя» - хорошая идея для класса «display: none» :) – Scalpweb

+0

True. Выполняется редактирование. Благодаря! – shubniggurath

1

Вы можете использовать цикл. Также вместо проверки css вы можете использовать .is(':visible')

for (var i = 0; i < arrOfChartContainers.length; i++) { 
    if ($('#' + arrOfChartContainers[i] + '_chartConfig').is(':visible')) { 
     drawChart(arrOfChartContainers[i]); 
    } 
} 
Смежные вопросы