Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Атрибуты свойств (https://javascript.ru/forum/misc/2673-atributy-svojjstv.html)

Dicot 30.01.2009 12:13

Атрибуты свойств
 
Подскажите, пожалуйста, когда и как устанавливаются атрибуты свойств объектов (раздел 8.6.1 стандарта). Можно ли их узнать и/или изменить.
Заранее спасибо.

Kolyaj 30.01.2009 12:35

object.property = 'value';

Dicot 30.01.2009 15:39

Я имею в виду атрибуты ReadOnly, DontEnum, DontDelete, Internal, которые описаны в стандарет EcmaScript в пункте 8.6.1.

Андрей Параничев 30.01.2009 17:01

Я точно не уверен, но вроде как эти атрибуты в JavaScript программно недоступны, либо вообще не реализованы.

JSTalker 29.06.2009 09:55

Эээ, а как же все таки изменить атрибут readonly (ну или на крайняк disabled)? Делаю ячейку таблицы с изменяющимся режимом доступа: доступен для редакт-я/не доступен. (по двойному клику на самой ячейке).

ИНТУИТ пишет, что "readonly [CI]

Если установлен, этот булев атрибут запрещает изменение ЭУ.

Атрибут readonly определяет, может ли ЭУ быть модифицирован пользователем.

Если установлен, атрибут readonly действует на элемент следующим образом:

ЭУ "только для чтения" может получить фокус, но не может быть модифицирован пользователем.
ЭУ "только для чтения" включён в навигацию табуляцией.
ЭУ "только для чтения" может быть "действующим".
Следующие ЭУ поддерживают атрибут readonly: INPUT и TEXTAREA.

То, как ЭУ "только для чтения" отображаются, зависит от ПА.

Примечание. Единственная возможность изменить значение атрибута readonly динамически - использование скриптов."
http://www.intuit.ru/department/inte...tml/17/10.html...

Но КАК? :help:

Пробовал и input_obj.readonly='true';
и input_obj.setAttribute='true'; - не катит :(

Может нужно потоковым изменением док-та (типа document.write или input_obj.innerHTML)? Подскажите если сможете.. Спасибо.

B~Vladi 29.06.2009 13:36

Писать нада не
input_obj.readonly='true';
input_obj.setAttribute='true';

а
input_obj.readOnly=true;
input_obj.setAttribute('readonly','readonly');

Riim 29.06.2009 13:44

Полный список:

'class': 'className',
'for': 'htmlFor',
usemap: 'useMap',
cellspacing: 'cellSpacing',
cellpadding: 'cellPadding',
colspan: 'colSpan',
rowspan: 'rowSpan',
valign: 'vAlign',
maxlength: 'maxLength',
readonly: 'readOnly',
tabindex: 'tabIndex',
accesskey: 'accessKey',
frameborder: 'frameBorder'

B~Vladi 29.06.2009 13:54

disabled только забыл...

Riim 29.06.2009 13:58

Цитата:

Сообщение от B~Vladi
disabled только забыл...

А он здесь зачем?

B~Vladi 29.06.2009 14:03

Цитата:

Сообщение от Riim
А он здесь зачем?

Ты привёл полный список атрибутов и свойств для текстового поля, но пропустил свойство (атрибут) disabled.

Riim 29.06.2009 14:05

Цитата:

Сообщение от B~Vladi
Ты привёл полный список атрибутов и свойств для текстового поля

Там не только для текстового поля.

B~Vladi 29.06.2009 14:06

Цитата:

Сообщение от Riim
Там не только для текстового поля.

Я вкурсе;) не суть...

Riim 29.06.2009 14:13

B~Vladi,
это список всех атрибутов высота букв, в имени которых, разная в html и javascript. Для disabled, насколько я знаю, она одинакова. Возможно, ты имеешь в виду, что для disabled в javascript-е нужно обязательно булево значение, тогда это нужно отдельным списком, смешивать эти списки не нужно.

B~Vladi 29.06.2009 14:43

Цитата:

Сообщение от Riim
это список всех атрибутов высота букв, в имени которых, разная в html и javascript

Я прекрасно понимаю что к чему. Не надо мне объяснять ок?
Я думал ты приводишь список всех атрибутов и соответствующих свойств для поля, а не только те, которые различаются.

JSTalker 29.06.2009 14:53

Цитата:

Сообщение от B~Vladi
а
input_obj.readOnly=true;
input_obj.setAttribute('readonly','readonly');

sorry, я так и писАл.

Вот моя функция, работающая по двойному клику на input'e
function myfoo(b)
{
if(b.className=='readable')
{
b.className='editable';
}
else
{
b.className='readable';
b.readonly=true;
}
if (b.readonly!=null)
{
alert('Read Only!');
}
//alert(b.className);
}

По событию (двойной клик), алерт выскакивает "Read Only!", но т.к. курсор редактирования остается там же в инпуте, содержимое по прежнему редактируется(. Хотя атрибут-на-чтение уже по идее установлен...

Я думал о внедрении дополнительного эл-та с атрибутом ридонли по 2-му клику (например b.innerHTML или document.write), но первый не подходит по причине проблемы извлечения потом содержимого инпута, а второй только дописывает в теги конец..( Надоумьте пожалуста.)

Kolyaj 29.06.2009 15:03

Цитата:

Сообщение от JSTalker
я так и писАл

Где же так-то?
Цитата:

Сообщение от B~Vladi
input_obj.readOnly=true;

Цитата:

Сообщение от JSTalker
b.readonly=true;


B~Vladi 29.06.2009 15:07

if(b.readonly!=null)

Это что такое?!
Писать так:
if(b.readOnly)

Riim 29.06.2009 15:16

Цитата:

Сообщение от B~Vladi
Я думал ты приводишь список всех атрибутов и соответствующих свойств для поля, а не только те, которые различаются.

Вижу я, что понял только после объяснения, но при этом все же пишешь:
Цитата:

Сообщение от B~Vladi
Я прекрасно понимаю что к чему. Не надо мне объяснять ок?

Не надо так не надо, ты как всегда сам умнее всех.

JSTalker 29.06.2009 15:21

ok. исправил. все равно алерт говорит(врет) ридонли!, а поле редактируемо:

<script type="text/javascript">
function myfoo(b)
{
	if(b.className=='readable')
	{
		b.className='editable';
		b.readOnly=false;
//			b.disabled=0;

	}
	else
	{
		b.className='readable';
		b.readOnly=true;

	}
	if (b.readOnly==true)
	{
alert('Read Only!');
	}
}
</script>

	<style>
			.readable		{	border-style:outset;}
			.editable		{	border-style:inset;	}
	</style>
</head>

<body>
<input id="id_1" name="ai1" ondblclick='myfoo(this);'/>


попробовал с дисаблед, как учат здесь http://stepbystep.htmlbook.ru/?id=29 , теперь по двойному клику поле становится деактивированным (ура!), но теперь я уже не могу войти в режим редактирования (

function myfoo(b)
{
if(b.className=='readable')
{
b.className='editable';
b.disabled=0;

}
else
{
b.className='readable';
b.disabled=1;
}
</script>

Я конечно понимаю, что можно это кнопкой сделать, но как то неохота делать кнопку к каждой редактируемой ячейке 10000-ячеичной таблице... Может кто знает, как делаются гриды в JS-библиотеках??

http://extjs.com/deploy/dev/examples...edit-grid.html

B~Vladi 29.06.2009 15:22

Цитата:

Сообщение от Riim
Не надо так не надо, ты как всегда сам умнее всех.

:lol: ок ок... чёт не то написал...

Цитата:

Сообщение от Riim
ты как всегда сам умнее всех.

Да, я крут!:D

B~Vladi 29.06.2009 15:32

Код работает нормально
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Документ без названия</title>
</head>
<script type="text/javascript">
function myfoo(b){
    if(b.className=='readable'){
        b.className='editable';
        b.readOnly=false; 
    }else{
        b.className='readable';
        b.readOnly=true;
    }
    if (b.readOnly){
		alert('Read Only!');
    }
}
</script>
<style>
.readable {
	border-style:outset;
}
.editable {
	border-style:inset;
}
</style>
</head>
<body>
<form action="" method="">
<input id="id_1" name="ai1" ondblclick='myfoo(this);'/>
</form>
</body>
</html>

JSTalker 29.06.2009 16:00

в эксплорере работает некорректно((

B~Vladi 29.06.2009 16:05

Работает.

JSTalker 29.06.2009 16:20

угу. спс.

JSTalker 29.06.2009 17:27

бага следующая: при переходе из режима "editable"->"readable", если не убрал курсор редактирования из ячейки, то могу продолжать редактировать :((. Если тыкаю мышкой куда-нибудь в др. место, а потом обратно на ячейку, то все ок (прикрыто).. Вот такой обломс(

Kolyaj 29.06.2009 17:32

Убрать фокус из поля перед изменением статуса.

B~Vladi 29.06.2009 17:34

Аха... бага...
Добавь
b.blur();

JSTalker 29.06.2009 18:20

B~Vladi
супер :)

rootv 30.11.2011 21:34

Подскажите молодому, подающему надежды!
<input type="text" name="test" id="test" value="111" size="45">
<input type="button" value="!!!" onClick="document.getElementById('test').readOnly= true;">
<input type="button" value="???" onClick="document.getElementById('test').readOnly= false;">

- Текстовое поле должно менять состояние.
Работает только в IE. Это бесповоротно или как-то надо делать иначе?

Да еще замучила большая буква в readOnly (думал не важно...)

rootv 30.11.2011 23:34

Однако не пойму логики...
Как только оформил выражение
document.getElementById('test').readOnly= true;
как функцию - все стало работать во всех браузерах (вообще все - и стили...)

Может кто объяснит?

tuzik00 10.04.2014 11:09

('readonly','readonly')
 
Цитата:

Сообщение от B~Vladi (Сообщение 23209)
Писать нада не
input_obj.readonly='true';
input_obj.setAttribute='true';

а
input_obj.readOnly=true;
input_obj.setAttribute('readonly','readonly');

readonly - нативное свойство объекта, обращение через атрибут само по себе костыль. $(this).attr("readonly","readonly");
Нативные эквивалент this.readonly = true;


Часовой пояс GMT +3, время: 02:37.