2013-03-23 3 views
2

Первый пост, долгое время. ROCKS!Pure Javascript: onClick выполняет переключение строк - нужен обмен изображениями

Нужна помощь. Я прежде всего профессионал Business Intelligence/Data Warehouse. Мне нужно использовать немного Javascript для создания сворачивающегося отчета строки в инструменте создания отчетов, где я не могу предвидеть возможность вызова JQuery (развертывание внутренней локальной сети). Поэтому мне нужен чистый Javascript.

Предпосылка: мне нужно, чтобы отчет был открыт с помощью строк только на уровне Менеджера/Района, но у них есть возможность открыть кластеры района, чтобы увидеть назначенных торговых представителей и их вклад.

Я нашел код, который делает это (довольно хорошо, спрятав имя повторяющегося диспетчера округа), но он использует текстовые объекты («+» и «-») для отображения ссылок за событием OnClick. Мне действительно, действительно, действительно нужно, чтобы он показывал чередующиеся изображения.

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

  1. lnk.innerHTML =(lnk.innerHTML == "+")?"--":"+";

  2. var link ='<a href="#" onclick="toggleSection(this);return false;" style="text-decoration: none">+</a>';

Приведенный ниже код содержит рабочий код с текстом для действия OnClick и ниже простого OnClick, который переключает изображения. По сути, мне нужно, чтобы значки папок были в первой ячейке сетки Manager/District. Я заставил рабочий код коллапса в основном блоке Javascript просто сэкономить место.

Любая помощь, проницательность, руководство, электрический шток для производства крупного рогатого скота (ouch) будет оценен по достоинству.

Заранее спасибо.

UPDATE: создали CodePen для этого, чтобы сделать его легче увидеть, что работает прямо сейчас:

http://codepen.io/anon/pen/yjLvh

Спасибо!

<html> 
<head> 
<style type="text/css"> 
table { empty-cells: show; } 
cell {font-family:'Calibri';font-size:11.0pt;color: #000000;} 
TD{font-family: Calibri; font-size: 10.5pt;} 
TH{font-family: Calibri; font-size: 10.5pt; } 
</style> 

</head> 
<body> 
<SCRIPT type=text/javascript> 
var tbl; 
var toggleimage=new Array("http://www.iconlooker.com/user-content/uploads/wall/thumb/misc._icons_open_folder.png","http://www.iconlooker.com/user-content/uploads/wall/thumb/misc._icons_closed_folder.png") 

function trim(str){ 
return str.replace(/^\s*|\s*$/g,""); 
} 

function getParent(el, pTagName) { 
if (el == null) return null; 
else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) // Gecko bug, supposed to be uppercase 
    return el; 
else 
    return getParent(el.parentNode, pTagName); 
} 

function toggleSection(lnk){ 

var td = lnk.parentNode; 
var table = getParent(td,'TABLE'); 
var len = table.rows.length; 
var tr = getParent(td, 'tr'); 
var rowIndex = tr.rowIndex; 
var rowHead=table.rows[rowIndex].cells[1].innerHTML; 

lnk.innerHTML =(lnk.innerHTML == "+")?"--":"+"; 

vStyle =(tbl.rows[rowIndex+1].style.display=='none')?'':'none'; 

for(var i = rowIndex+1; i < len;i++){ 
    if (table.rows[i].cells[1].innerHTML==rowHead){ 
    table.rows[i].style.display= vStyle; 
    table.rows[i].cells[1].style.visibility="hidden"; 
    } 
} 
} 

function toggleRows(){ 
    tables =document.getElementsByTagName("table"); 
    for(i =0; i<tables.length;i++){ 
     if(tables[i].className.indexOf("expandable") != -1) 
     tbl =tables[i]; 
    } 
    if(typeof tbl=='undefined'){ 
    alert("Could not find a table of expandable class"); 
    return; 
    } 

//assume the first row is headings and the first column is empty 
var len = tbl.rows.length; 
var link ='<a href="#" onclick="toggleSection(this);return false;" style="text-decoration: none">+</a>'; 

var rowHead = tbl.rows[1].cells[1].innerHTML; 

for (j=1; j<len;j++){ 
    //check the value in each row of column 2 
    var m = tbl.rows[j].cells[1].innerHTML; 

if(m!=rowHead || j==1){ 
    rowHead=m; 
    tbl.rows[j].cells[0].innerHTML = link; 
// tbl.rows[j].cells[0].style.textAlign="center"; 
    tbl.rows[j].style.background = "#FFFFFF"; 
    } 
else 
    tbl.rows[j].style.display = "none"; 
} 

} 
var oldEvt = window.onload; 

var preload_image_1=new Image() 
var preload_image_2=new Image() 
preload_image_1.src=toggleimage[0] 
preload_image_2.src=toggleimage[1] 
var i_image=0 

function testloading() { 
    isloaded=true 
} 

function toggle() { 
    if (isloaded) { 
     document.togglepicture.src=toggleimage[i_image] 
    } 
    i_image++ 
    if (i_image>1) {i_image=0} 
} 

window.onload = function() { if (oldEvt) oldEvt(); toggleRows(); testloading();} 


</SCRIPT> 

<TABLE class=expandable width="400px" border="1" cellspacing="0" frame="box" rules="all" > 
    <THEAD> 
    <TR> 
    <TH bgColor="#E6E4D4">&nbsp;</TH> 
    <TH bgColor="#E6E4D4" align="left">Manager</TH> 
    <TH bgColor="#E6E4D4" align="left">Sales Rep</TH> 
    <TH bgColor="#E6E4D4" align="left">Amount </TH></TR> 
</THEAD> 
    <TBODY> 
    <TR> 
    <TD>&nbsp;</TD> 
    <TD>Sarah Jones</TD> 
    <TD><i>Georgia District Reps</i></TD> 
    <TD>500000</TD></TR> 
    <TR> 
    <TD>&nbsp;</TD> 
    <TD>Sarah Jones</TD> 
    <TD>Rex Smtih</TD> 
    <TD>350000</TD></TR> 
    <TR> 
    <TD>&nbsp;</TD> 
    <TD>Sarah Jones</TD> 
    <TD>Alex Anderson</TD> 
    <TD>150000</TD></TR> 
    <TR> 
    <TD>&nbsp;</TD> 
    <TD>William Hobby</TD> 
    <TD><i>Texas District Reps</i></TD> 
    <TD>630000</TD></TR> 
    <TR> 
    <TD>&nbsp;</TD> 
    <TD>William Hobby</TD> 
    <TD>Bill Smith</TD> 
    <TD>410000</TD></TR> 
    <TR> 
    <TD>&nbsp;</TD> 
    <TD>William Hobby</TD> 
    <TD>Simon Wilkes</TD> 
    <TD>220000</TD></TR> 
</TBODY></font></TABLE> 
<br> 
<br> 
<a href="javascript:toggle()"><img name="togglepicture" src="http://www.iconlooker.com/user-content/uploads/wall/thumb/misc._icons_closed_folder.png" border="0"></a> 


</body> 
</html> 

ответ

0

working demo

<html> 
<head> 
<style type="text/css"> 
table { empty-cells: show; } 
cell {font-family:'Calibri';font-size:11.0pt;color: #000000;} 
TD{font-family: Calibri; font-size: 10.5pt;} 
TH{font-family: Calibri; font-size: 10.5pt; } 
</style> 

</head> 
<body> 
<SCRIPT type=text/javascript> 
var tbl; 
var toggleimage=new Array("http://www.iconlooker.com/user-content/uploads/wall/thumb/misc._icons_open_folder.png","http://www.iconlooker.com/user-content/uploads/wall/thumb/misc._icons_closed_folder.png") 

    var closedImgHTML = "<img name=\"togglepicture\" src=\"http://www.iconlooker.com/user-content/uploads/wall/thumb/misc._icons_closed_folder.png\" border=\"0\" height=\"20\">"; 

    var openImgHTML = "<img name=\"togglepicture\" src=\"http://www.iconlooker.com/user-content/uploads/wall/thumb/misc._icons_open_folder.png\" border=\"0\" height=\"20\">"; 

function trim(str){ 
return str.replace(/^\s*|\s*$/g,""); 
} 

function getParent(el, pTagName) { 
if (el == null) return null; 
else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) // Gecko bug, supposed to be uppercase 
    return el; 
else 
    return getParent(el.parentNode, pTagName); 
} 

function toggleSection(lnk){ 

var td = lnk.parentNode; 
var table = getParent(td,'TABLE'); 
var len = table.rows.length; 
var tr = getParent(td, 'tr'); 
var rowIndex = tr.rowIndex; 
var rowHead=table.rows[rowIndex].cells[1].innerHTML; 



lnk.innerHTML =(lnk.innerHTML == openImgHTML)?closedImgHTML:openImgHTML; 

vStyle =(tbl.rows[rowIndex+1].style.display=='none')?'':'none'; 

for(var i = rowIndex+1; i < len;i++){ 
    if (table.rows[i].cells[1].innerHTML==rowHead){ 
    table.rows[i].style.display= vStyle; 
    table.rows[i].cells[1].style.visibility="hidden"; 
    } 
} 
} 

function toggleRows(){ 
    tables =document.getElementsByTagName("table"); 
    for(i =0; i<tables.length;i++){ 
     if(tables[i].className.indexOf("expandable") != -1) 
     tbl =tables[i]; 
    } 
    if(typeof tbl=='undefined'){ 
    alert("Could not find a table of expandable class"); 
    return; 
    } 

//assume the first row is headings and the first column is empty 
var len = tbl.rows.length; 
var link ='<a href="#" onclick="toggleSection(this);return false;" style="text-decoration: none">'+closedImgHTML+'</a>'; 

var rowHead = tbl.rows[1].cells[1].innerHTML; 

for (j=1; j<len;j++){ 
    //check the value in each row of column 2 
    var m = tbl.rows[j].cells[1].innerHTML; 

if(m!=rowHead || j==1){ 
    rowHead=m; 
    tbl.rows[j].cells[0].innerHTML = link; 
// tbl.rows[j].cells[0].style.textAlign="center"; 
    tbl.rows[j].style.background = "#FFFFFF"; 
    } 
else 
    tbl.rows[j].style.display = "none"; 
} 

} 
var oldEvt = window.onload; 

var preload_image_1=new Image() 
var preload_image_2=new Image() 
preload_image_1.src=toggleimage[0] 
preload_image_2.src=toggleimage[1] 
var i_image=0 

function testloading() { 
    isloaded=true 
} 

function toggle() { 
    if (isloaded) { 
     document.togglepicture.src=toggleimage[i_image] 
    } 
    i_image++ 
    if (i_image>1) {i_image=0} 
} 

window.onload = function() { if (oldEvt) oldEvt(); toggleRows(); testloading();} 


</SCRIPT> 

<TABLE class=expandable width="400px" border="1" cellspacing="0" frame="box" rules="all" > 
    <THEAD> 
    <TR> 
    <TH bgColor="#E6E4D4">&nbsp;</TH> 
    <TH bgColor="#E6E4D4" align="left">Manager</TH> 
    <TH bgColor="#E6E4D4" align="left">Sales Rep</TH> 
    <TH bgColor="#E6E4D4" align="left">Amount </TH></TR> 
</THEAD> 
    <TBODY> 
    <TR> 
    <TD>&nbsp;</TD> 
    <TD>Sarah Jones</TD> 
    <TD><i>Georgia District Reps</i></TD> 
    <TD>500000</TD></TR> 
    <TR> 
    <TD>&nbsp;</TD> 
    <TD>Sarah Jones</TD> 
    <TD>Rex Smtih</TD> 
    <TD>350000</TD></TR> 
    <TR> 
    <TD>&nbsp;</TD> 
    <TD>Sarah Jones</TD> 
    <TD>Alex Anderson</TD> 
    <TD>150000</TD></TR> 
    <TR> 
    <TD>&nbsp;</TD> 
    <TD>William Hobby</TD> 
    <TD><i>Texas District Reps</i></TD> 
    <TD>630000</TD></TR> 
    <TR> 
    <TD>&nbsp;</TD> 
    <TD>William Hobby</TD> 
    <TD>Bill Smith</TD> 
    <TD>410000</TD></TR> 
    <TR> 
    <TD>&nbsp;</TD> 
    <TD>William Hobby</TD> 
    <TD>Simon Wilkes</TD> 
    <TD>220000</TD></TR> 
</TBODY></font></TABLE> 
<br> 
<br> 
<a href="javascript:toggle()"></a> 


</body> 
</html> 
+0

Хорошая работа Зеб. Я изо всех сил пытался найти синтаксис для изображений, которые будут работать в обоих местах кода. Я также сильно затрудняюсь найти надежный способ представления изображений как переменных. Ваше окончательное решение показывает, что я был на правильном пути. Спасибо, что помогли мне подтолкнуть меня наверх! Ура! – Novadar

+0

Zeb, Быстрый вопрос. Кажется, что если я внесу какие-либо изменения в свой URL-адрес изображения, код выйдет из строя. Даже если я удаляю атрибут высоты, переключатель не работает должным образом. Есть идеи? Мне действительно нужно использовать совершенно другой образ, который я просто вытащил из Интернета, чтобы получить код прямо. – Novadar

+0

Есть ли в вашей консоли синтаксические ошибки? (например, в Chrome, нажмите F12 и нажмите «Консоль» на своей странице). Если вы разместите код с фактическими URL-адресами изображений, я посмотрю –