Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.02.2013, 20:42
Новичок на форуме
Отправить личное сообщение для zhaaskar Посмотреть профиль Найти все сообщения от zhaaskar
 
Регистрация: 11.02.2013
Сообщений: 4

JS код некоректно работает со стилями
Здрасти! Имеется код с реализацией изменения background'а строки при щелкнутом checkbox'е. Но так как я незнаю JS (покачто), помогите подредактировать код.

Вот JS код:
function ClickCheckAll(vol)
    {
        var i=1;
        for(i=1;i<=document.frmMain.hdnCount.value;i++)
        {
            if(vol.checked == true)
            {
                eval("document.frmMain.chkDel"+i+".checked=true");
                eval("document.getElementById('tr"+i+"').bgColor='#CCCCCC'");
                
            }
            else
            {
                eval("document.frmMain.chkDel"+i+".checked=false");
                eval("document.getElementById('tr"+i+"').bgColor='#FFFFFF'");
            }
        }
    }
 
    function ClickMakeColorByTr(chk,ctrl)
    {
        if(chk.checked == false)
        {
            chk.checked = true;
            ClickMakeColor(chk,ctrl);
        }
        else
        {
            chk.checked = false;
            ClickMakeColor(chk,ctrl);
После этого щелкнутый checkbox не меняет background строки. Спасибо
        }
    }
 
    function ClickMakeColor(chk,ctrl)
    {
        if(chk.checked)
        {
            document.getElementById(ctrl).bgColor='#CCCCCC';
            chk.checked=true;
        }
        else
        {
            document.getElementById(ctrl).bgColor='#FFFFFF';
            chk.checked=false;
        }
    }


Вот HTML код:
<form name="frmMain" action="" method="post" OnSubmit="return onDelete();">
<table width="600" border="1">
  <tr>
    <th width="91"> <div align="center">CustomerID </div></th>
    <th width="98"> <div align="center">Name </div></th>
    <th width="198"> <div align="center">Email </div></th>
    <th width="97"> <div align="center">CountryCode </div></th>
    <th width="59"> <div align="center">Budget </div></th>
    <th width="71"> <div align="center">Used </div></th>
    <th width="30"> <div align="center">
      <input name="CheckAll" type="checkbox" id="CheckAll" value="Y" onClick="ClickCheckAll(this);">
    </div></th>
  </tr>
  <tr id="tr1" OnClick="ClickMakeColorByTr(document.frmMain.chkDel1,'tr1');">
    <td><div align="center">C001</div></td>
    <td>Win Weerachai</td>
    <td>win.weerachai@thaicreate.com</td>
    <td><div align="center">TH</div></td>
    <td align="right">1000000</td>
    <td align="right">600000</td>
    <td align="center"><input type="checkbox" name="chkDel[]" id="chkDel1" value="C001"OnClick="ClickMakeColorByTr(document.frmMain.chkDel1,'tr1');"></td>
  </tr>
  <tr id="tr2" OnClick="ClickMakeColorByTr(document.frmMain.chkDel2,'tr2');">
    <td><div align="center">C002</div></td>
    <td>John  Smith</td>
    <td>john.smith@thaicreate.com</td>
    <td><div align="center">EN</div></td>
    <td align="right">2000000</td>
    <td align="right">800000</td>
    <td align="center"><input type="checkbox" name="chkDel[]" id="chkDel2" value="C002" OnClick="ClickMakeColorByTr(document.frmMain.chkDel2,'tr2');"></td>
  </tr>
  <tr id="tr3" OnClick="ClickMakeColorByTr(document.frmMain.chkDel3,'tr3');">
    <td><div align="center">C003</div></td>
    <td>Jame Born</td>
    <td>jame.born@thaicreate.com</td>
    <td><div align="center">US</div></td>
    <td align="right">3000000</td>
    <td align="right">600000</td>
    <td align="center"><input type="checkbox" name="chkDel[]" id="chkDel3" value="C003" OnClick="ClickMakeColorByTr(document.frmMain.chkDel3,'tr3');"></td>
  </tr>
  <tr id="tr4" OnClick="ClickMakeColorByTr(document.frmMain.chkDel4,'tr4');">
    <td><div align="center">C004</div></td>
    <td>Chalee Angel</td>
    <td>chalee.angel@thaicreate.com</td>
    <td><div align="center">US</div></td>
    <td align="right">4000000</td>
    <td align="right">100000</td>
    <td align="center"><input type="checkbox" name="chkDel[]" id="chkDel4" value="C004" OnClick="ClickMakeColorByTr(document.frmMain.chkDel4,'tr4');"></td>
  </tr>
</table>
<input type="hidden" name="hdnCount" value="4">
</form>


Вот стиль:
.stripy tr:nth-child(2n+1){
    background-color:#ffe;
}
 
.stripy tr:nth-child(2n){
    background-color:#efe;
}
 
.stripy tr:hover {
    background-color:#999;
}

После этого при щелчке по checkbox'у background строки не меняется. Спасибо за внимание ...
Ответить с цитированием
  #2 (permalink)  
Старый 11.02.2013, 22:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

zhaaskar, "красить" красить надо ячейки а не строку ...
<!DOCTYPE HTML>
<html>
<head>
  <title></title>
<script language="JavaScript" type="text/javascript">
function ClickCheckAll(vol) {
    var i;
    for (i = 1; i < +document.frmMain.hdnCount.value; i++) {
        if (vol.checked == true) {
            document.getElementById("chkDel" + i).checked = true;
            td_color(document.getElementById('tr' + i), true)


        } else {
            document.getElementById("chkDel" + i).checked = false
            td_color(document.getElementById('tr' + i))
        }
    }
}

function ClickMakeColorByTr(chk, ctrl) {
    if (chk.checked == false) {
        chk.checked = true;
        ClickMakeColor(chk, ctrl);
    } else {
        chk.checked = false;
        ClickMakeColor(chk, ctrl);
    }
}

function ClickMakeColor(chk, ctrl) {
    if (chk.checked) {

        td_color(document.getElementById(ctrl), true)
        chk.checked = true;
    } else {
        td_color(document.getElementById(ctrl))
        chk.checked = false;
    }
}

function td_color(el, chk) {
    var td = el.getElementsByTagName('td'),
        len = td.length;
    for (var i = 0; i < len; i++) {
        td[i].style.backgroundColor = chk ? '#CCCCCC' : '#FFFFFF'

    }


}
</script>
<style type="text/css">
.stripy tr:nth-child(2n+1){
    background-color:#ffe;
}

.stripy tr:nth-child(2n){
    background-color:#efe;
}

.stripy tr:hover {
    background-color:#999;
}
</style>
</head>

<body>
<form name="frmMain" action="" method="post" OnSubmit="return onDelete();">
    <table width="600" border="1">
        <tr>
            <th width="91">
                <div align="center">CustomerID</div>
            </th>
            <th width="98">
                <div align="center">Name</div>
            </th>
            <th width="198">
                <div align="center">Email</div>
            </th>
            <th width="97">
                <div align="center">CountryCode</div>
            </th>
            <th width="59">
                <div align="center">Budget</div>
            </th>
            <th width="71">
                <div align="center">Used</div>
            </th>
            <th width="30">
                <div align="center">
                    <input name="CheckAll" type="checkbox" id="CheckAll" value="Y" onClick="ClickCheckAll(this);">
                </div>
            </th>
        </tr>
        <tr id="tr1" OnClick="ClickMakeColorByTr(document.frmMain.chkDel1,'tr1');">
            <td>
                <div align="center">C001</div>
            </td>
            <td>Win Weerachai</td>
            <td>win.weerachai@thaicreate.com</td>
            <td>
                <div align="center">TH</div>
            </td>
            <td align="right">1000000</td>
            <td align="right">600000</td>
            <td align="center">
                <input type="checkbox" name="chkDel[]" id="chkDel1" value="C001" OnClick="ClickMakeColorByTr(document.frmMain.chkDel1,'tr1');">
            </td>
        </tr>
        <tr id="tr2" OnClick="ClickMakeColorByTr(document.frmMain.chkDel2,'tr2');">
            <td>
                <div align="center">C002</div>
            </td>
            <td>John Smith</td>
            <td>john.smith@thaicreate.com</td>
            <td>
                <div align="center">EN</div>
            </td>
            <td align="right">2000000</td>
            <td align="right">800000</td>
            <td align="center">
                <input type="checkbox" name="chkDel[]" id="chkDel2" value="C002" OnClick="ClickMakeColorByTr(document.frmMain.chkDel2,'tr2');">
            </td>
        </tr>
        <tr id="tr3" OnClick="ClickMakeColorByTr(document.frmMain.chkDel3,'tr3');">
            <td>
                <div align="center">C003</div>
            </td>
            <td>Jame Born</td>
            <td>jame.born@thaicreate.com</td>
            <td>
                <div align="center">US</div>
            </td>
            <td align="right">3000000</td>
            <td align="right">600000</td>
            <td align="center">
                <input type="checkbox" name="chkDel[]" id="chkDel3" value="C003" OnClick="ClickMakeColorByTr(document.frmMain.chkDel3,'tr3');">
            </td>
        </tr>
        <tr id="tr4" OnClick="ClickMakeColorByTr(document.frmMain.chkDel4,'tr4');">
            <td>
                <div align="center">C004</div>
            </td>
            <td>Chalee Angel</td>
            <td>chalee.angel@thaicreate.com</td>
            <td>
                <div align="center">US</div>
            </td>
            <td align="right">4000000</td>
            <td align="right">100000</td>
            <td align="center">
                <input type="checkbox" name="chkDel[]" id="chkDel4" value="C004" OnClick="ClickMakeColorByTr(document.frmMain.chkDel4,'tr4');">
            </td>
        </tr>
    </table>
    <input type="hidden" name="hdnCount" value="5">
</form>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 12.02.2013, 07:08
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А не проще для td прописать {background-color: inherit} ?
И вобще, не проще ли просто переключать css-класс строки таблицы?

Как же все любят все усложнять...
Ответить с цитированием
  #4 (permalink)  
Старый 13.02.2013, 12:02
Новичок на форуме
Отправить личное сообщение для zhaaskar Посмотреть профиль Найти все сообщения от zhaaskar
 
Регистрация: 11.02.2013
Сообщений: 4

рони, danik.js
Спасибо за помощь, особенно рони.
И еще один вопрос, как сделать так чтобы он запоминал какие цвета были до щелчка по checkbox'у?
Ответить с цитированием
  #5 (permalink)  
Старый 13.02.2013, 12:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от zhaaskar
как сделать так чтобы он запоминал какие цвета были до щелчка по checkbox'у?
более подробно можно куда и зачем запоминать?
Ответить с цитированием
  #6 (permalink)  
Старый 13.02.2013, 13:04
Новичок на форуме
Отправить личное сообщение для zhaaskar Посмотреть профиль Найти все сообщения от zhaaskar
 
Регистрация: 11.02.2013
Сообщений: 4

Строки у таблицы разные (зебра), когда я нажимаю на checkbox он меняет background на серый, когда снимаю checkbox он становиться белый, а не прежний цвет.
Ответить с цитированием
  #7 (permalink)  
Старый 13.02.2013, 13:06
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

zhaaskar,
логично наверно в атрибут data, хотя имхо удобнее менять цвет добавкой класса, а убирать - удалением оного
Ответить с цитированием
  #8 (permalink)  
Старый 13.02.2013, 13:16
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от Deff
удобнее менять цвет добавкой класса, а убирать - удалением оного
При этом соблюдая приоритеты селекторов, т.о. будет решена задача
Сообщение от zhaaskar
сделать так чтобы он запоминал какие цвета были до щелчка по checkbox'у
Т.е. будет не "запоминание", а просто смена селектора...
Ответить с цитированием
  #9 (permalink)  
Старый 13.02.2013, 13:27
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от ksa
просто смена селектора
Что-то типа такого...

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
.even {
	background-color: silver;
}
.on,
.even.on {
	background-color: red;
}
</style>
<script type="text/javascript">
$(document).ready(function (){
	$('tr').click(function (){
		$('tr').removeClass('on');
		$(this).addClass('on');
	});
});
</script>
</head>
<body>
<table>
	<tr>
		<td>1</td>
	</tr>
	<tr class='even'>
		<td>2</td>
	</tr>
	<tr>
		<td>3</td>
	</tr>
	<tr class='even'>
		<td>4</td>
	</tr>
</table>
</body>
</html>
Ответить с цитированием
  #10 (permalink)  
Старый 13.02.2013, 13:47
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

<!DOCTYPE HTML>
<html>
<head>
  <title></title>
<style type="text/css">
.stripy tr:nth-child(2n+1){
    background-color:#ffe;
}

.stripy tr:nth-child(2n){
    background-color:#efe;
}

.stripy tr:hover {
    background-color:#999;
}
.grid tr.selected td{
    background-color: #ccc;
}
.grid thead th{
    text-align: center;
}
</style>
</head>

<body>
<form name="frmMain" action="" method="post" OnSubmit="return onDelete();">
    <table width="600" border="1" class="grid">
        <thead>
        <tr>
            <th width="91">
                <div>CustomerID</div>
            </th>
            <th width="98">
                <div>Name</div>
            </th>
            <th width="198">
                <div>Email</div>
            </th>
            <th width="97">
                <div>CountryCode</div>
            </th>
            <th width="59">
                <div>Budget</div>
            </th>
            <th width="71">
                <div>Used</div>
            </th>
            <th width="30">
                <div>
                    <input name="CheckAll" type="checkbox" id="CheckAll" value="Y" onclick="clickCheckAll()">
                </div>
            </th>
        </tr>
        </thead>
        <tbody>
        <tr id="tr1">
                <div align="center">C001</div>
            </td>
            <td>Win Weerachai</td>
            <td>win.weerachai@thaicreate.com</td>
            <td>
                <div align="center">TH</div>
            </td>
            <td align="right">1000000</td>
            <td align="right">600000</td>
            <td align="center">
                <input type="checkbox" name="chkDel[]" id="chkDel1" value="C001">
            </td>
        </tr>
        <tr id="tr2">
            <td>
                <div align="center">C002</div>
            </td>
            <td>John Smith</td>
            <td>john.smith@thaicreate.com</td>
            <td>
                <div align="center">EN</div>
            </td>
            <td align="right">2000000</td>
            <td align="right">800000</td>
            <td align="center">
                <input type="checkbox" name="chkDel[]" id="chkDel2" value="C002">
            </td>
        </tr>
        <tr id="tr3">
            <td>
                <div align="center">C003</div>
            </td>
            <td>Jame Born</td>
            <td>jame.born@thaicreate.com</td>
            <td>
                <div align="center">US</div>
            </td>
            <td align="right">3000000</td>
            <td align="right">600000</td>
            <td align="center">
                <input type="checkbox" name="chkDel[]" id="chkDel3" value="C003">
            </td>
        </tr>
        <tr id="tr4">
            <td>
                <div align="center">C004</div>
            </td>
            <td>Chalee Angel</td>
            <td>chalee.angel@thaicreate.com</td>
            <td>
                <div align="center">US</div>
            </td>
            <td align="right">4000000</td>
            <td align="right">100000</td>
            <td align="center">
                <input type="checkbox" name="chkDel[]" id="chkDel4" value="C004">
            </td>
        </tr>
        </tbody>
    </table>
    <input type="hidden" name="hdnCount" value="5">
</form>

<script>
(function(){
    var form = document.getElementsByName('frmMain')[0];
    var table = form.getElementsByTagName('table')[0];
    var checker = table.children[0].getElementsByTagName('input')[0];
    var rows = table.children[1].getElementsByTagName('tr');
    
    var toggleRow = function(row, checked) {
        var checkbox = row.getElementsByTagName('input')[0];
        if (checked === undefined) {
            checked = !checkbox.checked;
        }
        if (checked) {
            row.className = row.className + (checkbox.checked ? '' : ' selected');
        } else {
            row.className = row.className.replace(' selected', '');
        }
        checkbox.checked = checked;
    }
    
    for (var i = 0; i < rows.length; i++) {
        var checkbox = rows[i].getElementsByTagName('input')[0];
        checkbox.onclick = function() { this.checked = !this.checked }
        rows[i].onclick = function(){ toggleRow(this) };
    }
    
    checker.onclick = function() {
        for (var i = 0; i < rows.length; i++) {
            toggleRow(rows[i], this.checked);
        }
    }
})();
</script>
</body>
</html>


Да, с jQuery в сто раз проще было бы...

Последний раз редактировалось danik.js, 13.02.2013 в 14:49.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не получается вставить код js в HTML garmoni Элементы интерфейса 3 05.09.2013 05:56
JS: работает на сервере, не работает из папки -majestic- Общие вопросы Javascript 2 02.08.2012 14:41
Код работает корректно во всех браузерах кроме IE8 Yamasa Events/DOM/Window 6 18.01.2011 07:40
JS меню работает на обычной html странице, а на юкозовском движке нет. adware Я не знаю javascript 10 16.05.2009 16:48
Почему не работает JS с подгруженными в DOM элементами? V-z-z-HobboT jQuery 6 30.03.2009 14:02