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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> атрибуты для форм 
:(
    Опции темы
marozz
Дата 19.3.2013, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите разобраться. Нужно на странице найти все элементы с классом "some" (это будут input ) и установить для них атрибут readonly="readonly"
Признаюсь в javascript почти 0, пишу на php, прошу помощи
PM MAIL   Вверх
baldina
Дата 19.3.2013, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



Код

if(document.getElementsByClassName === undefined) {
    document.getElementsByClassName = function(classList) {           
        var i,j,
        list = document.getElementsByTagName('*'),
        length = list.length, 
        classArray = classList.split(/\s+/),
        classes = classArray.length,
        result = [], i,j
        for(i = 0; i < length; i++)
            for(j = 0; j < classes; j++)
                if(list[i].className.search('\\b' + classArray[j] + '\\b') != -1) {
                    result.push(list[i])
                    break;
                }
        return result
    }
}

var some = document.getElementsByClassName('some');
for(var i=0; i < some.length; ++i)
    some[i].readOnly=true;

PM MAIL   Вверх
marozz
Дата 20.3.2013, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо, но поля на которых установлен class='some' не блокируются
PM MAIL   Вверх
baldina
Дата 20.3.2013, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



у меня блокируются: http://jsfiddle.net/VqSy3/
что я делаю не так?
PM MAIL   Вверх
Aliance
Дата 20.3.2013, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



baldina, разве что еще стоило учесть это:
Цитата(marozz @  19.3.2013,  20:25 Найти цитируемый пост)
(это будут input )


PM MAIL WWW ICQ Skype   Вверх
baldina
Дата 20.3.2013, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



мож я чего не понял, но в моём примере 
Цитата(baldina @  20.3.2013,  13:20 Найти цитируемый пост)
 http://jsfiddle.net/VqSy3/

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


Новичок



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

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



Код

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<head><title>тест</title>
<script type="text/javascript">
if(document.getElementsByClassName === undefined) {
    document.getElementsByClassName = function(classList) {           
        var i,j,
        list = document.getElementsByTagName('*'),
        length = list.length, 
        classArray = classList.split(/\s+/),
        classes = classArray.length,
        result = [], i,j
        for(i = 0; i < length; i++)
            for(j = 0; j < classes; j++)
                if(list[i].className.search('\\b' + classArray[j] + '\\b') != -1) {
                    result.push(list[i])
                    break;
                }
        return result
    }
}

var some = document.getElementsByClassName('some');
for(var i=0; i < some.length; ++i)
    some[i].readOnly=true;

</script>
</head>
<body>
<input type='text' class='some'/>
</body>
</html>

Попробуйте соххранить в файл и выполнить в браузере.
Не работает, что я делаю не так?

Это сообщение отредактировал(а) marozz - 20.3.2013, 19:13
PM MAIL   Вверх
baldina
Дата 20.3.2013, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



Цитата(marozz @  20.3.2013,  19:04 Найти цитируемый пост)
Не работает, что я делаю не так?

пытаетесь обработать элементы, которых еще нет в html на момент запуска скрипта.
javascript отрабатывает немедленно, так что надо выполнять свой код после загрузки всей страницы или хотя бы поместить скрипт после тегов, которые он обрабатывает

Код

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<head><title>тест</title>
<script type="text/javascript">
if(document.getElementsByClassName === undefined) {
    document.getElementsByClassName = function(classList) {           
        var i,j,
        list = document.getElementsByTagName('*'),
        length = list.length, 
        classArray = classList.split(/\s+/),
        classes = classArray.length,
        result = [], i,j
        for(i = 0; i < length; i++)
            for(j = 0; j < classes; j++)
                if(list[i].className.search('\\b' + classArray[j] + '\\b') != -1) {
                    result.push(list[i])
                    break;
                }
        return result
    }
}
</script>
</head>
<body>
<input type='text' class='some'/>
<script type="text/javascript">
var some = document.getElementsByClassName('some');
for(var i=0; i < some.length; ++i)
    some[i].readOnly=true;
</script>
</body>
</html>

PM MAIL   Вверх
marozz
Дата 20.3.2013, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



baldina, точно, сори. А нельзя ли в саму функцию дописать инициализацию скрипта после полной загрузки страницы,  чтоб не прописывать javascript код в тело страницы, а вынести его в отдельный файл. Может бред конечно несу smile 
и еще такой момент, возможно ли модифицировать скрипт таким образом чтоб к примеру если есть конструкция
Код

<div class='slaas'>
    <p>Текст</p><input  type='checkbox' ><input type='text'>
</div>

Если на втором input (type='text')установлен класс some, он не просто блокируется, но и при этом для checkbox возле него присваивается свойство display:none , при этом обойтись без присвоения id для checkbox

Это сообщение отредактировал(а) marozz - 20.3.2013, 20:25
PM MAIL   Вверх
baldina
Дата 20.3.2013, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



Цитата(marozz @  20.3.2013,  20:03 Найти цитируемый пост)
нельзя и в саму функцию дописать инициализацию скрипта после полной загрузки страницы, 

Код

window.onload = function (){
  var some = document.getElementsByClassName('some');
  for(var i=0; i < some.length; ++i)
    some[i].readOnly=true;
}

еще лучше какой-нить библиотекой воспользоваться, напр. jquery

Цитата(marozz @  20.3.2013,  20:03 Найти цитируемый пост)
возможно ли модифицировать скрипт таким образом чтоб к примеру если есть конструкция

можно. только придется поработать с DOM. что бы сделать это проще, опять же jquery и т.п. поможет
PM MAIL   Вверх
marozz
Дата 20.3.2013, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



baldina, jquery уже впринципе на странице для других скриптов используется. Вот как это написать ? не поможете студенту ?smile буду очень благодарен smile
PM MAIL   Вверх
baldina
Дата 20.3.2013, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



Цитата(marozz @  20.3.2013,  21:18 Найти цитируемый пост)
jquery уже впринципе на странице для других скриптов используется. Вот как это написать ?

ищите функцию ready и вписывайте туда то что нужно.
Код

jQuery().ready(function (){
 ....
  var some = document.getElementsByClassName('some');
  for(var i=0; i < some.length; ++i)
    some[i].readOnly=true;
 ....
})


насчет второго курите селекторы

Добавлено через 4 минуты и 16 секунд
кстати при использовании jquery огород с document.getElementsByClassName городить не надо

Код

$().ready(function (){
 ....
  $(".some").attr("readOnly", true);
 ....
})

PM MAIL   Вверх
Aliance
Дата 21.3.2013, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Цитата(baldina @  20.3.2013,  18:24 Найти цитируемый пост)
мож я чего не понял, но в моём примере именно input 

я по ссылке не переходил, а смотрел пример кода, который непосредственно здесь был во втором посте. там был нативный js аналог такой конструкции:
Код
$('.some')

а я лишь уточнил, что автору нужно более конкретно:
Код
$('input.some')


хотя это все мелочи, и собственно jQuery легко в этом поможет.
PM MAIL WWW ICQ Skype   Вверх
baldina
Дата 21.3.2013, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



нативный код реализовал getElementsByClassName, тут теги непричем
а в посте ТС было 
Цитата(marozz @  19.3.2013,  19:25 Найти цитируемый пост)
найти все элементы с классом "some" (это будут input ) 

т.е. найти все, а что они все input типа и так получится. а если надо, с выбиранием input ТС и сам справится)))
тем боле теперь, с jquery  smile 
PM MAIL   Вверх
marozz
Дата 21.3.2013, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



baldina, спасибо, тут вроде вроде ясно, а как можно сделать подобное ?

Цитата

и еще такой момент, возможно ли модифицировать скрипт таким образом чтоб к примеру если есть конструкцияРазметка HTML
Код

<div class='slaas'>
    <p>Текст</p><input  type='checkbox' ><input type='text'>
</div>

Если на втором input (type='text')установлен класс some, он не просто блокируется, но и при этом для checkbox (если он есть) возле него присваивается свойство display:none , при этом обойтись без присвоения id для checkbox


Это сообщение отредактировал(а) marozz - 21.3.2013, 17:08
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




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


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

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