Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Delete in the table row all onchange 
V
    Опции темы
Veve
  Дата 2.2.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 1.1.2005
Где: Латвия, Рига

Репутация: 1
Всего: 13



Имеется таблица примерно следующей структуры:

Код

<table>
<tr>
    <td>
        <input type="text" onchange="dosomething()">
    </td>

    <td>
        <input type="text" onchange="dosomething()">
    </td>
    ...

    <td>
        <input type="text" onchange="dosomething()">
    </td>
</tr>

...
<tr>
    <td>
        <input type="text" onchange="dosomething()">
    </td>

    <td>
        <input type="text" onchange="dosomething()">
    </td>
    ...

    <td>
        <input type="text" onchange="dosomething()">
    </td>
</tr>
</table>


Нужно написать функцию:

Код

function delOnChange(node)
{
    //node- указатель на определёную строчку таблицы
}


Которая в строке node у всех содержащихся в ней input-элементах уберёт событие onChange


Вариант который пришёл мне в голову следующий:
Код


function delOnChange(node)
{
    var str=node.innerHTML;
    str=str.replace(/onchange="dosomething()"/gi, "");
    node.innerHTML=str;

}


Этот вариант мне почти подходит однако, при innerHTML не сохраняются данные введёные в инпуты... а это не есть хорошо

Заранее спасибо за помощь! smile 
PM MAIL ICQ Skype MSN   Вверх
AKS
Дата 2.2.2008, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Судя по показанной разметке, а также по регвыру, у Вас используется один event handler по имени dosomething. Следовательно в функции delOnChange Вам достаточно написать dosomething.isDisabled = true, а в коде функции dosomething вставить первой сторокой вот это:
Код

if (dosomething.isDisabled) {
    return false;
};


PM MAIL   Вверх
Veve
Дата 2.2.2008, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 1.1.2005
Где: Латвия, Рига

Репутация: 1
Всего: 13



Тогда это функция dosomething() не будет работать для всех input-элементов при событие onChange, а мне нужно чтобы это происходило только для input-элементов находящихся в определённой строке таблицы node.
PM MAIL ICQ Skype MSN   Вверх
AKS
Дата 2.2.2008, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



А таблица статичная? Если да, то можно передавать аргументом в dosomething индекс ряда. В функции delOnChange написать dosomething.disabledId = 0, а в dosomething сравнивать аргумент со значением этого св-ва (при совпадении - return). 
PM MAIL   Вверх
ksnk
Дата 2.2.2008, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Код

function delOnChange(node)
{
    var inp=node.getElementsByTagName('input'),inp_len=input.length;
    while(inp_length--){
         inp[inp_length].onchange='';
    }
}
 А так - сработает?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Veve
Дата 2.2.2008, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 1.1.2005
Где: Латвия, Рига

Репутация: 1
Всего: 13



Цитата

А таблица статичная? 

Нет денамическая...

Цитата

 А так - сработает?
function delOnChange(node)
{
    var inp=node.getElementsByTagName('input'),inp_len=input.length;
    while(inp_length--){
         inp[inp_length].onchange='';
    }
}


Так тоже не сработает... Так как в нутри строки... inputи с разными именнами и их количество меняется... и к тому же не только инпуты... smile 
PM MAIL ICQ Skype MSN   Вверх
AKS
Дата 2.2.2008, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(Veve @  2.2.2008,  20:30 Найти цитируемый пост)
Нет денамическая...

Ну раз денамическая, то нужно написать функцию getParentId, которая будет получать ряд таблицы и возвращать его индекс. Затем именно этот результат сравнивать с установленным "флажком" (dosomething.disabledId):
Код

function dosomething(aThis) { // aThis - ссылка на input
    if (typoef dosomething.disabledId == 'number') {
        if (dosomething.disabledId == getParentId(aThis)) {
            return false;
        };
    };
    // ...
};

Это в случае, если запрет устанавливать только на один ряд. Если сразу на несколько, то чуть-чуть по другому...

Это сообщение отредактировал(а) AKS - 2.2.2008, 20:49
PM MAIL   Вверх
Veve
Дата 2.2.2008, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 1.1.2005
Где: Латвия, Рига

Репутация: 1
Всего: 13



а можно чуток подробнее про getParentId... а то как то не встречал..
PM MAIL ICQ Skype MSN   Вверх
AKS
Дата 3.2.2008, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(Veve @  2.2.2008,  21:14 Найти цитируемый пост)
а то как то не встречал.. 

Ну так самому надо писать. ;) Что-нибудь такое:
Код

function getParentId(aThis) {
    if (typeof aThis != 'object' || !aThis ||
            aThis.nodeType !== 1) {
        return -1;
    };
    var p = aThis.parentNode;
    var re = /^tr$/i;
    while (p) {
        if (re.test(p.tagName)) {
            return p.rowIndex;
        };
        p = p.parentNode;
    };
    return -1;
};

PM MAIL   Вверх
smartov
Дата 3.2.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Вижу решение от ksnk и не понимаю в чем проблема.
Цитата(Veve @  2.2.2008,  19:30 Найти цитируемый пост)
Так тоже не сработает... Так как в нутри строки... inputи с разными именнами и их количество меняется... и к тому же не только инпуты...


Ну и что что с разными именами? Ну и что что количество меняется? Ну и что что там не только инпуты?
По заданию:
Цитата(Veve @  2.2.2008,  13:45 Найти цитируемый пост)

Которая в строке node у всех содержащихся в ней input-элементах уберёт событие onChange

Тот код именно это и делает.

Там только одна ошибка, надо не
inp_len=input.length;
а
inp_len=inp.length;


PM MAIL   Вверх
Veve
Дата 3.2.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 1.1.2005
Где: Латвия, Рига

Репутация: 1
Всего: 13



Да действительно.. чего, то меня переклинило... Большое спасибо smartov и ksnk!  smile 
PM MAIL ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.