Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Замена значения атрибута (https://javascript.ru/forum/dom-window/67074-zamena-znacheniya-atributa.html)

kzn 27.01.2017 00:38

Замена значения атрибута
 
Доброго времени суток!
Прошу помочь новичку с вопросами, а именно:
Есть коды:
<div class= "form-group" ng-class="{error: myForm.type.$invalid}">
            <label> ОПФ </label>
            <div>
								<select class="form-control" onChange="Selected(this)" ng-model="agent.type" placeholder="Выберите ОПФ" name="type" required/>
									<option value="ИП">ИП</option>
									<option value="ЮЛ">ЮЛ</option>
								</select>
                <span ng-show="myForm.type.$dirty && myForm.type.$invalid" class="help-inline">Выберите ОПФ</span>
            </div>
        </div>

<div class= "form-group" id="innblock" ng-class="{error: myForm.inn.$invalid}">
            <label> ИНН </label>
            <div>
                <input name="inn" id="iinn" pattern="\d+" ng-model="agent.inn" type= "text" class= "form-control" maxlength="12" placeholder="ИНН" required/>
                <span ng-show="myForm.inn.$dirty && myForm.inn.$invalid" class="help-inline">Введите ИНН</span>
            </div>
        </div>

Как заменить значение атрибута, например maxlength чтобы было 10?
Пытался через функцию:
<script type="text/javascript">
      function Selected(a) {
				var label = a.value;
				if (label=="ИП") {
					document.getElementById("iinn").maxlength="12";
				} else {
					document.getElementById("iinn").maxlength="10";
				}
			}
    </script>

А вообще идея менять значения атрибутов, включать-выключать атрибуты(required disabled) в зависимости от условия выбора из select. Это возможно?
еще пробовал так:
<script type="text/javascript">
      function Selected(a) {
				var label = a.value;
				var ell = document.querySelector("div.form-group input[name=inn]");
				if (label=="ИП") {
					ell.maxlength="12";
				} else {
					ell.maxlength="10";
				}
			}
    </script>

и никак :( :help:
возможно поменять только disabled.
Кстати, disabled влияет на required? т.е. если тег disabled, атрибут required должен выключится или нет?
У меня не выключается...

laimas 27.01.2017 02:08

https://learn.javascript.ru/attribut...tom-properties

kzn 27.01.2017 20:52

Спасибо, посмотрел, но не помогло.

<div class= "form-group" id="kppblock" style='display: block;' ng-class="{error: myForm.kpp.$invalid}">
            <label> КПП </label>
            <div>
                <input name="kpp" id="kkpp" ng-model="agent.kpp" type= "num" min="0" max="999999999" class= "form-control" placeholder="КПП" required/>
                <span ng-show="myForm.kpp.$dirty && myForm.kpp.$invalid" class="help-inline">Введите КПП</span>
            </div>
        </div>


Пробовал как в документации, а именно в функции так:

kkpp.setAttribute(maxlength, 12);


и даже так:
<script type="text/javascript">
      function Selected(a) {
				var label = a.value;
				var el = document.querySelector("div.form-group input[name=kpp]");
				var ell = document.querySelector("div.form-group input[name=inn]");
				if (label=="ИП") {
					document.getElementById("kppblock").style.display='none';
					ell.setAttribute(maxlength, 12);
					el.disabled = true;
				} else {
					document.getElementById("kppblock").style.display='block';
					ell.setAttribute(maxlength, 10);
					el.disabled = false;
				}
			}

но не срабатывает maxlength. disabled и display срабатывают. Что не правильно?
script функции надо именно в body вставлять?

kzn 27.01.2017 20:57

elem.hasAttribute(name), elem я так понял это id?
получается можно менять атрибуты только у div?

рони 27.01.2017 21:02

Цитата:

Сообщение от kzn
ell.setAttribute(maxlength, 12);

кавычки где?

kzn 27.01.2017 21:18

Из документации:
Цитата:

Пример ниже устанавливает атрибуты и демонстрирует их особенности.
Цитата:

elem.setAttribute('Test', 123); // (2) атрибут Test установлен
Цитата:

Мы можем записать в атрибут любое значение, но оно будет превращено в строку. Объекты также будут автоматически преобразованы.
Но вставка кавычек не помогло, пробежал по всем вариантам:(

laimas 27.01.2017 21:26

Цитата:

Сообщение от kzn
elem.setAttribute('Test', 123); // (2) атрибут Test установлен

Это опровержение
Цитата:

Сообщение от рони
кавычки где?

:) ?

kzn 27.01.2017 21:29

Цитата:

Сообщение от laimas (Сообщение 442508)
Это опровержение :) ?

Не понял вопроса.
Кавычки вставил, не помогло

laimas 27.01.2017 21:32

Цитата:

Сообщение от kzn
Пробовал как в документации, а именно в функции так:
kkpp.setAttribute(maxlength, 12);

Цитата:

Сообщение от рони
кавычки где?

Цитата:

Сообщение от kzn
Из документации:
Цитата:
Пример ниже устанавливает атрибуты и демонстрирует их особенности.
Цитата:
elem.setAttribute('Test', 123); // (2) атрибут Test установлен

Это диалог или монолог? Похоже на опровержение.

рони 27.01.2017 21:39

kzn,
<div class= "form-group" id="innblock" ng-class="{error: myForm.inn.$invalid}">
            <label> ИНН </label>
            <div>
                <input name="inn" id="iinn" pattern="\d+" ng-model="agent.inn" type= "text" class= "form-control" maxlength="12" placeholder="ИНН" required/>
                <span ng-show="myForm.inn.$dirty && myForm.inn.$invalid" class="help-inline">Введите ИНН</span>
            </div>
        </div>

<script>
    var ell = document.querySelector("div.form-group input[name=inn]");
    ell.setAttribute("maxlength", "10");
</script>

kzn 27.01.2017 22:02

Цитата:

Сообщение от laimas (Сообщение 442510)
Это диалог или монолог? Похоже на опровержение.

да, типа опровержения

kzn 27.01.2017 22:05

Цитата:

Сообщение от рони (Сообщение 442512)
kzn,
<div class= "form-group" id="innblock" ng-class="{error: myForm.inn.$invalid}">
            <label> ИНН </label>
            <div>
                <input name="inn" id="iinn" pattern="\d+" ng-model="agent.inn" type= "text" class= "form-control" maxlength="12" placeholder="ИНН" required/>
                <span ng-show="myForm.inn.$dirty && myForm.inn.$invalid" class="help-inline">Введите ИНН</span>
            </div>
        </div>

<script>
    var ell = document.querySelector("div.form-group input[name=inn]");
    ell.setAttribute("maxlength", "10");
</script>

Спасибо огромное, получилось! я не обертывал в кавычки название атрибута, невнимательность!:dance:

kzn 27.01.2017 22:26

А required возможно удалить?
Код:

el.removeAttribute("required");
не срабатывает
пробовал так тоже:
Код:

el.setAttribute("required", false);

рони 28.01.2017 05:11

Цитата:

Сообщение от kzn
не срабатывает

почему вы так решили?

laimas 28.01.2017 07:09

el.setAttribute("required", false); - так не получится, это булево свойство.

<style>
input:required {
    background: #f00;
}
</style>
<input required="" /><input type="button" value="Remove" onclick="this.previousSibling.removeAttribute('required')"/>
<br/>
<input required="" /><input type="button" value="Set Not" onclick="this.previousSibling.required=!1"/>

рони 28.01.2017 07:37

laimas,
забавно изменяется свойство required после removeAttribute('required') в ie, css сработает только при изменении фокуса.
можно сделать
input[required] {
    background: #f00;
}
тогда это незаметно.

laimas 28.01.2017 07:56

Да, есть такое, но для примера и так сойдет, тут пользователей ишака наверное и не найти. )

А я обычно так поступаю, чтобы пользователь видел последствия:

input:invalid {
    
}

input:valid {
     
}


при этом при удалении свойства и ишак должен реагировать нормально.

kzn 28.01.2017 12:58

Цитата:

Сообщение от рони (Сообщение 442525)
почему вы так решили?

Кажется я понял. Проверил по вашим и laimas примерам, required убирается. Значит дело в другом, буду дальше разбираться. Спасибо огромное laimas и рони за помощь!


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