this
?Спустя 16 минут, 11 секунд (22.12.2011 - 21:52) killer8080 написал(а):
var childs = this.parentNode.parentNode.parentNode.childNodes;
for(var i = 0; i < childs.length; i++){
// childs[i]
}
Спустя 4 минуты, 41 секунда (22.12.2011 - 21:57) jon378 написал(а):
Это я уже пробовал -
Uncaught exception: TypeError: Cannot convert 'this.parentNode' to object
Спустя 1 минута, 30 секунд (22.12.2011 - 21:58) killer8080 написал(а):
jon378
а на что указывает this? Может это не элемент DOM?
а на что указывает this? Может это не элемент DOM?
Спустя 6 минут, 36 секунд (22.12.2011 - 22:05) jon378 написал(а):
this указывает на <option/> И к первому родителю (то есть к <select>) обращаться можно. А вот к дедушке через папу - не получается. Дедушка - это <td>
Спустя 7 минут, 32 секунды (22.12.2011 - 22:13) killer8080 написал(а):
Цитата (jon378 @ 22.12.2011 - 21:05) |
this указывает на <option/> |
уверен? Интересно какое события ты умудрился привинтить к option.
Сделай
alert(this.tagName);чтобы убедится.
Спустя 5 минут, 8 секунд (22.12.2011 - 22:18) jon378 написал(а):
Ох, ёлки... Ундефинид... Спасибо, буду искать другой путь.
Спустя 1 минута, 46 секунд (22.12.2011 - 22:19) killer8080 написал(а):
jon378
покажи код, может че подскажу.
покажи код, может че подскажу.

Спустя 15 минут (22.12.2011 - 22:34) Oyeme написал(а):
$(this).parent().parent()
Спустя 11 минут, 11 секунд (22.12.2011 - 22:46) jon378 написал(а):
Постарался лишнее убрать:
И функция:
Здесь в двух словах, надо изменить bgColor у <tr>, но только если все дяди селекта, по которому onClick, имеют value=0
<tr id="tr_1_1">
<td>
<select>
<option onClick="trNoColor(1,1)" value="0" />Преподаватель/Дисциплина
<?php
for ($p = 1; $p<=5; $p++) {
echo '
<option value="'.$plan[$p]['plan_id'].'" onClick="trColor(1,1)" />'.$plan[$p]['prep_disc'];
}
?>
</select>
</td>
</tr>
И функция:
function trNoColor(i,j) {
var thisSelect = this.parentNode;
//var thisTd = thisSelect.parentNode; //пробовал и так...
//var thisTd = this.parentNode.parentNode; //...и так
alert(this.tagName);
var flag = 1;
var k = 0;
while (thisTd.childNodes[k] != thisTd.lastChild) {
if (thisTd.childNodes[k].value != 0) {
flag = 0;
}
k++;
}
if (flag == 1) {
trId = 'tr_'+i+'_'+j;
document.getElementById(trId).bgColor='E4F5FF';
}
}
Здесь в двух словах, надо изменить bgColor у <tr>, но только если все дяди селекта, по которому onClick, имеют value=0
Спустя 12 минут, 11 секунд (22.12.2011 - 22:58) jon378 написал(а):
Цитата (Oyeme @ 22.12.2011 - 19:34) |
$(this).parent().parent() |
Это JS или PHP?
Спустя 57 минут, 32 секунды (22.12.2011 - 23:55) forza написал(а):
это библиотека Jquery -)
Спустя 7 часов, 39 минут, 25 секунд (23.12.2011 - 07:35) jon378 написал(а):
А если без Jquery? Я и так уже много чего прицепил, а ресурс расчитан на пользователей с медленным соединением, боюсь что грузится долго будет.
Спустя 2 часа, 22 минуты, 21 секунда (23.12.2011 - 09:57) Oyeme написал(а):
Один раз файлик скачать весов 37kb,и после того он закеширеутся - это много?

Спустя 1 минута, 48 секунд (23.12.2011 - 09:59) killer8080 написал(а):
jon378
теперь понятно, ссылку на селект нужно передавать аргументом вызова события, и вешать обработчик нужно на селект, но никак не на опшин.
Поясни какие ноды ты собирался там искать? У тебя же там только один селект?
теперь понятно, ссылку на селект нужно передавать аргументом вызова события, и вешать обработчик нужно на селект, но никак не на опшин.
<tr id="tr_1_1">
<td>
<select onClick="trNoColor(1,1, this)">
<option value="0" />Преподаватель/Дисциплина</option>
<?php
for ($p = 1; $p<=5; $p++) {
echo '
<option value="'.$plan[$p]['plan_id'].'">'.$plan[$p]['prep_disc'].'</option>';
}
?>
</select>
</td>
</tr>
function trNoColor(i,j, select) {
var thisSelect = this.parentNode;
//var thisTd = thisSelect.parentNode; //пробовал и так...
//var thisTd = this.parentNode.parentNode; //...и так
alert(this.tagName);
var flag = 1;
var k = 0;
while (thisTd.childNodes[k] != thisTd.lastChild) {
if (thisTd.childNodes[k].value != 0) {
flag = 0;
}
k++;
}
if (flag == 1) {
trId = 'tr_'+i+'_'+j;
document.getElementById(trId).bgColor='E4F5FF';
}
}
Поясни какие ноды ты собирался там искать? У тебя же там только один селект?
Спустя 1 час, 18 минут, 56 секунд (23.12.2011 - 11:18) jon378 написал(а):
Я неверно написал - деди не селекта, а опшена должны иметь value=0. Количество селектов динамически меняется от 1 до 4. И если у всех селектов value=0, нужно сменить цвет у <tr>. Если же хотя бы один селект сменит value на значение, отличное от 0, то нужно снова сменить цвет <tr>
Спустя 2 минуты, 55 секунд (23.12.2011 - 11:21) jon378 написал(а):
Цитата (Oyeme @ 23.12.2011 - 06:57) |
Один раз файлик скачать весов 37kb,и после того он закеширеутся - это много? ![]() |
Просто я с JQuery не разу не работал, думал оно тяжелое. Обязательно попробую.
Спустя 12 минут, 37 секунд (23.12.2011 - 11:33) killer8080 написал(а):
jon378
можно так
Инструменты нужно использовать по задаче. Если нужно только один раз на странице сделать простое действие, то тянуть для этого фреймворк как минимум глупо.
К тому же если только начал учить js, то сначала изучи нативный синтаксис, а не ищи легкие пути, чтоб потом не понимать как оно вообще работает.
можно так
<td>
<select onchange="trNoColor(this)">
<option value="0" />Преподаватель/Дисциплина</option>
<?php
for ($p = 1; $p<=5; $p++) {
echo '
<option value="'.$plan[$p]['plan_id'].'">'.$plan[$p]['prep_disc'].'</option>';
}
?>
</select>
</td>
</tr>
function trNoColor(select) {
var td = select.parentNode;
var selects = td.getElementsByTagName('select');
for(var i = 0; i < selects.length; i++){
if(selects[i].value != 0 ){
td.style.backgroundColor = '#E4F5FF'; // цвет фона если селект не в нуле
return;
}
}
td.style.backgroundColor = '#FFF'; // цвет поумолчанию
}
Инструменты нужно использовать по задаче. Если нужно только один раз на странице сделать простое действие, то тянуть для этого фреймворк как минимум глупо.
К тому же если только начал учить js, то сначала изучи нативный синтаксис, а не ищи легкие пути, чтоб потом не понимать как оно вообще работает.
Спустя 7 минут, 15 секунд (23.12.2011 - 11:41) jon378 написал(а):
Цитата (killer8080 @ 23.12.2011 - 08:33) |
Инструменты нужно использовать по задаче. Если нужно только один раз на странице сделать простое действие, то тянуть для этого фреймворк как минимум глупо. К тому же если только начал учить js, то сначала изучи нативный синтаксис, а не ищи легкие пути, чтоб потом не понимать как оно вообще работает. |
Ну вот и я собственно про то же.
killer8080, большое спасибо.