JavaScript сообщение таблицы
От: Trup  
Дата: 30.10.06 09:43
Оценка:
Вобщем есть таблица с большим числом ячеек.
Нужно узнать на какой ячейче пользователь нажал и что в этой ячейке содержится (текст какойто).

Ставить в каждую ячейку обработчик события OnClick не рационально, потому как обьем страницы вырастет очень сильно.

Как можно через событие OnClick в обработчике самой таблицы получить требуемый результат?

Или есть какойто другой способ?

Спасибо за ответы.
Re: JavaScript сообщение таблицы
От: Сэма Россия  
Дата: 30.10.06 10:50
Оценка:
Здравствуйте, Trup, Вы писали:

T>Как можно через событие OnClick в обработчике самой таблицы получить требуемый результат?


Запускаешь после загрузки на выполнение скрипт, который обойдет все дочерние элементы таблицы и если это TD, то вешаешь ему обработчик события onClick. Объем будет меньше.

        <table id="demo_table">
            <tr>
                <td>1</td>
                {очень много строк и столбцов}
                <td>1</td>
            </tr>
        </table>
        <script>
            function onTDClick(){
                alert("I'm here");
            }
            var _table = document.getElementById('demo_table');
            for (i=0; i < _table.rows.length; i++) {
                for (j=0; j < _table.rows(i).cells.length; j++) {
                    _table.rows(i).cells(j).onclick = onTDClick;
                }
            }
        </script>
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: JavaScript сообщение таблицы
От: Trup  
Дата: 30.10.06 12:03
Оценка:
Здравствуйте, Сэма, Вы писали:

С>Здравствуйте, Trup, Вы писали:


T>>Как можно через событие OnClick в обработчике самой таблицы получить требуемый результат?


С>Запускаешь после загрузки на выполнение скрипт, который обойдет все дочерние элементы таблицы и если это TD, то вешаешь ему обработчик события onClick. Объем будет меньше.


С>
С>        <table id="demo_table">
С>            <tr>
С>                <td>1</td>
С>                {очень много строк и столбцов}
С>                <td>1</td>
С>            </tr>
С>        </table>
С>        <script>
С>            function onTDClick(){
С>                alert("I'm here");
С>            }
С>            var _table = document.getElementById('demo_table');
С>            for (i=0; i < _table.rows.length; i++) {
С>                for (j=0; j < _table.rows(i).cells.length; j++) {
С>                    _table.rows(i).cells(j).onclick = onTDClick;
С>                }
С>            }
С>        </script>
С>


Может тогда подскажите как узнать какая ИМЕННО была нажата ячейка и ЧТО в ней содержится

мой код нехочет пахать

function TablClick(i, j) {
    alert(i);
    alert(j);
}

var _table = document.getElementById('MainTable');
for (i=0; i < _table.rows.length; i++) {
    for (j=0; j < _table.rows(i).cells.length; j++) {
        _table.rows(i).cells(j).onclick = TablClick(i, j);
    }
}
Re[3]: JavaScript сообщение таблицы
От: Сэма Россия  
Дата: 30.10.06 12:46
Оценка:
Здравствуйте, Trup, Вы писали:

1) В определении события таким образом передается только имя функции без скобок и параметров;
2) Для того, чтобы определить в каком элементе произошло событие используй window.event.srcElement
3) А на самом деле, вызов event с параметрами надо делать так:
function TablClick(i, j) {
    alert(i);
    alert(j);
}

var _table = document.getElementById('MainTable');
for (i=0; i < _table.rows.length; i++) {
    for (j=0; j < _table.rows(i).cells.length; j++) {
        _table.rows(i).cells(j).onclick = function (event) {TablClick(i, j);}
    }
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: JavaScript сообщение таблицы
От: Trup  
Дата: 30.10.06 13:06
Оценка:
Здравствуйте, Сэма, Вы писали:

С>Здравствуйте, Trup, Вы писали:


С>1) В определении события таким образом передается только имя функции без скобок и параметров;

С>2) Для того, чтобы определить в каком элементе произошло событие используй window.event.srcElement
С>3) А на самом деле, вызов event с параметрами надо делать так:
С>
С>function TablClick(i, j) {
С>    alert(i);
С>    alert(j);
С>}

С>var _table = document.getElementById('MainTable');
С>for (i=0; i < _table.rows.length; i++) {
С>    for (j=0; j < _table.rows(i).cells.length; j++) {
С>        _table.rows(i).cells(j).onclick = function (event) {TablClick(i, j);}
С>    }
С>}

С>


Спасибо за ответ.

Но, если использовать код написанный выше, каждый раз когда жмешь на таблицу выдаются одни и теже числа (максимальное i и j).
Re: JavaScript сообщение таблицы
От: qwertyytrewq  
Дата: 31.10.06 06:08
Оценка:
Здравствуйте, Trup, Вы писали:

T>Вобщем есть таблица с большим числом ячеек.

T>Нужно узнать на какой ячейче пользователь нажал и что в этой ячейке содержится (текст какойто).

T>Ставить в каждую ячейку обработчик события OnClick не рационально, потому как обьем страницы вырастет очень сильно.


T>Как можно через событие OnClick в обработчике самой таблицы получить требуемый результат?


T>Или есть какойто другой способ?


T>Спасибо за ответы.


простой пример:

<script>
function clickCell() {
alert(event.srcElement.innerText);
}
</script>
...
<table onclick="clickCell();">
...
</table>
Re[2]: JavaScript сообщение таблицы
От: Trup  
Дата: 31.10.06 08:16
Оценка:
Здравствуйте, qwertyytrewq, Вы писали:

Q>Здравствуйте, Trup, Вы писали:


T>>Вобщем есть таблица с большим числом ячеек.

T>>Нужно узнать на какой ячейче пользователь нажал и что в этой ячейке содержится (текст какойто).

T>>Ставить в каждую ячейку обработчик события OnClick не рационально, потому как обьем страницы вырастет очень сильно.


T>>Как можно через событие OnClick в обработчике самой таблицы получить требуемый результат?


T>>Или есть какойто другой способ?


T>>Спасибо за ответы.


Q>простой пример:


Q><script>

Q>function clickCell() {
Q> alert(event.srcElement.innerText);
Q>}
Q></script>
Q>...
Q><table onclick="clickCell();">
Q>...
Q></table>

В данном случае все работает, а как бы узнать хотябы на какой колонке был произведен клик в таблице?
Re[3]: JavaScript сообщение таблицы
От: Сэма Россия  
Дата: 31.10.06 08:41
Оценка:
Здравствуйте, Trup, Вы писали:

T>В данном случае все работает, а как бы узнать хотябы на какой колонке был произведен клик в таблице?

Как в моем случае, так и в данном ключевое слово event.srcElement.
Присвой ячейке удобоваримый и легкий для парсинга ID, например "r1c5", а дальше event.srcElement.id подскажет тебе это значение
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: JavaScript сообщение таблицы
От: kan Великобритания  
Дата: 31.10.06 09:07
Оценка:
Trup wrote:

> Как можно через событие OnClick в обработчике самой таблицы получить

> требуемый результат?

> Или есть какойто другой способ?

По моим наблюдениям, обычный HTML рисуется быстрее, чем "облегчённый" с добавленными яваскриптом функциями (по крайней
мере в IE). Так что не парься, делай onclick="click(10)", если так волнует объём, то лучше к веб-серверу прикрутить
zip-компрессию трафика.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: JavaScript сообщение таблицы
От: i-ka Россия  
Дата: 31.10.06 09:19
Оценка:
Здравствуйте, Trup, Вы писали:

Q>>простой пример:


Q>><script>

Q>>function clickCell() {
Q>> alert(event.srcElement.innerText);
Q>>}
Q>></script>
Q>>...
Q>><table onclick="clickCell();">
Q>>...
Q>></table>

T>В данном случае все работает, а как бы узнать хотябы на какой колонке был произведен клик в таблице?


function clickCell() {
  alert("Column: " + event.srcElement.cellIndex);
  alert("Row: " + event.srcElement.parentNode.rowIndex);
}


Вроде так.
Re[4]: JavaScript сообщение таблицы
От: Trup  
Дата: 31.10.06 09:47
Оценка:
Здравствуйте, i-ka, Вы писали:

IK>Здравствуйте, Trup, Вы писали:


Q>>>простой пример:


Q>>><script>

Q>>>function clickCell() {
Q>>> alert(event.srcElement.innerText);
Q>>>}
Q>>></script>
Q>>>...
Q>>><table onclick="clickCell();">
Q>>>...
Q>>></table>

T>>В данном случае все работает, а как бы узнать хотябы на какой колонке был произведен клик в таблице?


IK>
IK>function clickCell() {
IK>  alert("Column: " + event.srcElement.cellIndex);
IK>  alert("Row: " + event.srcElement.parentNode.rowIndex);
IK>}
IK>


IK>Вроде так.


Спасибо все работает
Re[5]: JavaScript сообщение таблицы
От: kan Великобритания  
Дата: 31.10.06 10:02
Оценка: +1
Trup wrote:

> Но, если использовать код написанный выше, каждый раз когда жмешь на

> таблицу выдаются одни и теже числа (максимальное i и j).
Да, это так работают замыкания в JS, для переменных надо создавать новую функцию, что-то типа:
function makeOnClick(i,j) {
   return function(){alert(i+', '+j)}
}
... onclick=makeOnClick(i,j)
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: JavaScript сообщение таблицы
От: kan Великобритания  
Дата: 31.10.06 10:09
Оценка:
Trup wrote:

> IK> alert("Column: " + event.srcElement.cellIndex);

> IK> alert("Row: " + event.srcElement.parentNode.rowIndex);
> Спасибо все работает
Считаю своим долгом предупредить, что это нестандартно и работает только под IE.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[6]: JavaScript сообщение таблицы
От: i-ka Россия  
Дата: 31.10.06 11:05
Оценка:
Здравствуйте, kan, Вы писали:

kan>Trup wrote:


>> IK> alert("Column: " + event.srcElement.cellIndex);

>> IK> alert("Row: " + event.srcElement.parentNode.rowIndex);
>> Спасибо все работает
kan>Считаю своим долгом предупредить, что это нестандартно и работает только под IE.

Не под IE что-то типа:

<script language="javascript" type="text/javascript">
function clickCell(evt) {
    alert("Column: " + evt.target.cellIndex);
    alert("Row: " + evt.target.parentNode.rowIndex);
}
</script>

<table onclick="clickCell(event);" >
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.