|
|
|
| У меня вопрос, а можно ли как-нибудь, по событию OnClick получить оные значения. | |
|
|
|
|
|
|
|
для: Зосим
(25.02.2008 в 23:52)
| |
<td onclick="with (this) alert ('cellIndex = ' + cellIndex + '\nrowIndex = ' + parentNode.rowIndex)">
|
| |
|
|
|
|
|
|
|
для: CNTv2.0
(26.02.2008 в 00:33)
| | Честное слово не получается. Вот переписал таблицу таким образом, но не работает почему-то((
<SCRIPT language="Javascript">
function gentrtd(m,n){var trtd=" ";
for(i=0; i<m;i++){
trtd+="<TR>";
for(j=0; j<n;j++){
trtd+="<TD onclick="with (this) alert ('cellIndex = ' + cellIndex + '\nrowIndex = ' + parentNode.rowIndex)"> </TD>";
}
trtd+="</TR>";
}
return trtd;
}
</SCRIPT>
<CENTER>
<TABLE border=3 bgcolor="lightgreen" width=100% height=100% id=tab >
<SCRIPT language="Javascript">
document.write(gentrtd(10,15));
</SCRIPT>
</TABLE>
</CENTER>
|
В чём проблема???
И ещё вопрос по таблицам, почему в IE таблица создается во весь фрейм, а в Опере только по ширине, а высота во весь фрейм не делается. Где можно узнать, какие параметры в каких браузерах работают, а в каких нет или отображаются по другому. | |
|
|
|
|
|
|
|
для: Зосим
(26.02.2008 в 19:49)
| | 1. Проблема в вашей неряшливости.
Писать код надо вдумчиво. Так, чтобы понятно было хотя бы самому себе.
Да и правила необходимо соблюдать. Например, значения всех HTML-атрибутов должны быть закавычены
<script>
function gentrtd (m, n)
{
for (var t = new Array (), i = k = 0; i < m; i++)
{
t [k] = '<tr>';
for (var j = 0; j < n; j++) t [k] += '<td onclick="fClick (this)"> </td>';
t [k++] += '</tr>';
}
return t.join ('\n');
}
function fClick (x)
{
with (x) alert ('cellIndex = ' + cellIndex + '\nrowIndex = ' + parentNode.rowIndex);
}
</script>
<center>
<table border="1" bgcolor="lightgreen" width="100%" height="100%" id="tab" cellspacing="10">
<script>
document.write (gentrtd (10, 15));
</script>
</table>
</center>
|
2. В Эксплорере по умолчанию свойство высота тега BODY равна высоте окна. В прочих браузерах - не так, высота тега <BODY> равна высоте фактического содержимого.
Поэтому рекомендую ВСЕГДА, в любых страницах прописывать:
<style>
html, body {width: 100%; height: 100%}
</style>Эксплорер это проигнорирует, а вот прочие браузеры после этой строки отсчитывать проценты начнут от реального размера окна (как это и делает Эксплорер по умолчанию). | |
|
|
|
|
|
|
|
для: CNTv2.0
(27.02.2008 в 01:03)
| | Точно ведь запутался в кавычках)
Ещё пару вопросиков можно, что означает parentNode? Как работает with(this) и как собственно с ним обращаться.
function fClick (x) {
var z= with(x).cellIndex;
}
|
Например, так не работает.
В книжке, которая у меня есть по HTML, with упоминается один раз когда перечисляются зарезервированные слова(( Объясните пожалуйста. | |
|
|
|
|
|
|
|
для: Зосим
(27.02.2008 в 02:06)
| | 1. Ко всякому объекту документа можно обращаться по разному.
Самое простое - по его id
Например, для кода
<div><span id="mSPAN"><b>1</b><i>2</i>3</span></div>
| к тегу <SPAN> обратиться просто - document.getElementById ('mSPAN')
А как в этом же коде обратиться к тегу <DIV> или к тегам <B> или <I> - у них ведь id не прописан?
Для этого и существуют разные свойства, связанные с иерархией тегов на странице.
Оносительно любого объекта существуют:
родитель объекта - parentNode,
первый ребенок объекта - firstChild,
следующий за объектом ребенок родителя объекта - nextSibling,
... есть и ещё много разных свойств...
Вчитайтесь в код и запустите его. И, надеюсь, всё станет ясно:
<div><span id="mSPAN"><b>1</b><i>2</i>3</span></div>
<input type="button" value="Demo" onclick="mFunc ()">
<script>
function mFunc ()
{
var objSPAN = document.getElementById ('mSPAN'); alert ('objSPAN - ' + objSPAN.tagName);
var objDIV = objSPAN.parentNode; alert ('objDIV - ' + objDIV.tagName);
var objB = objSPAN.firstChild; alert ('objB - ' + objB.tagName);
var objI = objB.nextSibling; alert ('objI - ' + objI.tagName);
}
</script>
|
В коде для определения индексов при клике по ячейке функции передается объект this. т.е. сам тег <TD>, по которому кликнули. Чтобы определить rowIndex, надо перейти к "родителю ячейки", к строке <TR> (именно строки имеют rowIndex). Вот поэтому и используется x.parentNode
2. with - это оператор для сокращения записи.
Перевод буквальный - русский предлог "С" ("С чем-то", "С кем-то")
Например, некоему объекту c id="myOBJ" вам надо назначить несколько свойств.
Можно написать так:
document.getElementById ('myOBJ').className = 'myClass';
document.getElementById ('myOBJ').title = 'Привет!';
document.getElementById ('myOBJ').style.border = '2px solid red';
document.getElementById ('myOBJ').style.color = 'yellow';
document.getElementById ('myOBJ').style.fontSize = '14px';
document.getElementById ('myOBJ').style.fontFamily = 'arial';
| Используя оператор with, всё то же самое можно записать чуть короче, используя меньше буковок:
with (document.getElementById ('myOBJ'))
{
className = 'myClass';
title = 'Привет!';
with (style)
{
border = '2px solid red';
color = 'yellow';
fontSize = '14px';
fontFamily = 'arial';
}
}
| как видите, with можно даже вкладывать - поначалу работали С самим объектом, а после with (style) работа идет СО стилем объекта
Внутри вышенаписанной функции строка
with (x) alert ('cellIndex = ' + cellIndex + '\nrowIndex = ' + parentNode.rowIndex);
| это то же самое, что и
alert ('cellIndex = ' + x.cellIndex + '\nrowIndex = ' + x.parentNode.rowIndex);
|
| |
|
|
|