Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Изменение псевдокласса DISABLED при активации события (https://javascript.ru/forum/misc/22854-izmenenie-psevdoklassa-disabled-pri-aktivacii-sobytiya.html)

Electron 03.11.2011 11:12

Изменение псевдокласса DISABLED при активации события
 
Похожие темы имеются, но они мне не помогли :agree:

Нужно, чтобы при активации флажка (checkbox) кнопка (submit) становилась активной, а при деактивации - неактивной :)

Данный код отображает кнопку при активации флажка, но без обратного эффекта:
<form method="get" action="#">
	<input type="checkbox" name="checkbox" onfocus="this.form.submit.disabled=0" />
	<input type="submit" name="submit" value="Button" disabled />
</form>


Так же получилось условие в событие (onChange) для флажка:
if (this.form.checkbox.checked == 1) {
	this.form.submit.disabled = 0
} else {
	this.form.submit.disabled = 1
}

aka:
if (document.getElementById('checkbox').checked == 1) {
	document.getElementById('submit').disabled = 0
} else {
	document.getElementById('submit').disabled = 1
}

На локальном компьютере работает отлично, а на сайте почему-то код сокращается до такого варианта:
if(document.getElementById('checkbox').checked==1)else

Возможно ошибка тупо в синтаксисе? :blink: Или может нужно использовать другое событие? :-?

ksa 03.11.2011 13:41

Цитата:

Сообщение от Electron
при активации флажка (checkbox) кнопка (submit) становилась активной, а при деактивации - неактивной

Как вариант...

<script>
function Go(Type) {
   document.getElementById('test').disabled=!Type;
}
</script>
<form method="get" action="#">
	<input type="checkbox" name="checkbox" onclick="Go(this.checked)" />
	<input id='test' type="submit" name="submit" value="Button" disabled />
</form>

Electron 04.11.2011 11:14

Цитата:

Сообщение от ksa
Как вариант...

К сожалению та же история, работает на локальном компьютере, а на сайте нет :no:
А всё, оказалось, из-за того, что тупой движок сайта ставил внутри скриптов тег <br/>...

Зато отлично сработал такой вариант (исходя из Вашего):
<form method="get" action="#">
	<input type="checkbox" name="checkbox" onmousedown="this.form.submit.disabled=this.checked" />
	<input type="submit" name="submit" value="Button" disabled />
</form>


Так что, спасибо :yes:

ksa 04.11.2011 11:19

Electron, мой вариант не зависит от <br />... :D И не завист от того, где он установлен.

Electron 04.11.2011 12:07

Цитата:

Сообщение от ksa (Сообщение 134404)
Electron, мой вариант не зависит от <br />... :D И не завист от того, где он установлен.

Я о Вас ничего и не говорю, это движок сайта тупит... :agree:

Сейчас та же проблема, не работает из-за того, что движок удаляет часть скрипта, нужно чтобы так же код был без условий :-E

То есть выглядеть это будет так:
<script>
function send() {
	if (this.form.text.value=='') {
		alert('Укажите номер Вашего счета!'); return false;
	} else {
		alert('Данные отправлены!');
	}
}
</script>
<form method="get" action="#">
	Укажите номер Вашего счета
	<input type="text" name="text" size="10" />
	<br />
	Я принимаю условия соглашения
	<input type="checkbox" name="checkbox" onmousedown="this.form.submit.disabled=this.checked" />
	<input type="submit" name="submit" value="Скачать договор" onclick="send()" disabled />
</form>

Ничего нового, на локальном компьютере работает, а в интернете - нет :write:

ksa 04.11.2011 12:42

Цитата:

Сообщение от Electron
а в интернете - нет

Бивас, тест!

<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
function send() {
	if (this.form.text.value=='') {
		alert('Укажите номер Вашего счета!'); return false;
	} else {
		alert('Данные отправлены!');
	}
}
</script>
</head>
<body>
<form method="get" action="#">
	Укажите номер Вашего счета
	<input type="text" name="text" size="10" />
	<br />
	Я принимаю условия соглашения
	<input type="checkbox" name="checkbox" onmousedown="this.form.submit.disabled=this.checked" />
	<input type="submit" name="submit" value="Скачать договор" onclick="send()" disabled />
</form>
</body>
</html>

Таки работает и в инете. :) Смотрю в Опере...

Electron 04.11.2011 12:59

Цитата:

Сообщение от ksa (Сообщение 134421)
Таки работает и в инете. :) Смотрю в Опере...

Вы слышите о чём я говорю? :lol: На движке для сайта e107 не работает! :blink:
Такая проблема решается выносом скрипта в отдельный JS-файл, но в таком случае не работает "return false"... :cray:

ksa 04.11.2011 13:03

Electron, ты описываешь какие-то страсти-мордасти...

melky 04.11.2011 13:42

такая проблема решается в первую очередь выключением минификатора скриптов в движке.

Electron 04.11.2011 13:45

Цитата:

Сообщение от melky (Сообщение 134437)
такая проблема решается в первую очередь выключением минификатора скриптов в движке.

Но ведь в таком случае полетит оформление всех страниц сайта?! :blink:

trikadin 04.11.2011 14:06

Почему?

Electron 04.11.2011 14:22

Цитата:

Сообщение от trikadin (Сообщение 134443)
Почему?

Ну потому, что все имеющиеся страницы созданы с учётом этих настроек, и при отключении данной функции все страницы, по идее, исказятся :)

Слушайте, что-то "return false" вообще перестал работать:
<script type="text/javascript">
function send() {
	if (document.getElementById('text').value == '') {
		alert('Укажите номер Вашего счета!'); return false
	} else {
		alert('Данные отправлены!')
	}
}
</script>
<form method="get" class="form" name="form" action="#">
	Укажите номер Вашего счета
	<input type="text" name="text" id="text" size="10" />
	<br />
	Я принимаю условия соглашения
	<input type="checkbox" name="checkbox" onmousedown="this.form.submit.disabled=this.checked" />
	<input type="submit" name="submit" value="Скачать договор" onclick="send()" disabled />
</form>

Форма обрабатывается в любом случае, а мне нужно чтобы если "text" не заполнен, выдавалось сообщение и обработка прекращалась, для чего там и стоит "return false" что не так? :blink:

trikadin 04.11.2011 14:28

Цитата:

Сообщение от Electron
Ну потому, что все имеющиеся страницы созданы с учётом этих настроек, и при отключении данной функции все страницы, по идее, исказятся

А проверить не?

Да сколько можно. У форм есть замечательный обработчик onsubmit:
<script type="text/javascript">
function send() {
    if (document.getElementById('text').value == '') {
        alert('Укажите номер Вашего счета!'); return false;
    } else { // Вот здесь if зачем был?
        alert('Данные отправлены!')
    }
}
</script>
<form method="get" class="form" name="form" action="" onsubmit="return send()">
    Укажите номер Вашего счета
    <input type="text" name="text" id="text" size="10" />
    <br />
    Я принимаю условия соглашения
    <input type="checkbox" name="checkbox" onmousedown="this.form.submit.disabled=this.checked" />
    <input type="submit" name="submit" value="Скачать договор" disabled />
</form>

Electron 04.11.2011 14:43

Цитата:

Сообщение от trikadin (Сообщение 134449)
А проверить не?

А проверить - не! Сайт не мой и если всё полетит, я потом за всю жизнь не расплачусь :nono:

Цитата:

Сообщение от trikadin (Сообщение 134449)
Да сколько можно. У форм есть замечательный обработчик onsubmit:

Что значит сколько можно? Я от Вас только что узнал о его существование, загуглил, и вправду полезная штука, всё работает, даже движок не вякнул! Спасибо :)

trikadin 04.11.2011 14:56

Цитата:

Сообщение от Electron
Что значит сколько можно? Я от Вас только что узнал о его существование

Вот-вот. Неуловимый обработчик - всем нужно отдельно написать, что он есть, и что не нужно обработчик на onclick кнопки отправки ставить.

ksa 04.11.2011 17:41

Цитата:

Сообщение от Electron
Я от Вас только что узнал о его существование, загуглил, и вправду полезная штука, всё работает, даже движок не вякнул!

Какое неуловимое это событие onsubmit! :D Ну никак про него не могут узнать...

Electron 04.11.2011 18:35

И заключающий, надеюсь, вопрос: как будет выглядеть регулярное выражение для цифр от 0 до 9, и для символов от 2 до 6? :)
Написал такое:
/[0-9]{2,6}/
Но оно допускает это - "777ааа", то есть мне нужно ещё как-то запретить все символы, кроме цифр? Заранее спасибо.

melky 04.11.2011 19:10

Цитата:

Сообщение от Electron (Сообщение 134497)
как будет выглядеть регулярное выражение для цифр от 0 до 9, и для символов от 2 до 6?

што???

дайте примеры строк, которым оно будет соответствовать

Electron 07.11.2011 10:16

Цитата:

Сообщение от melky (Сообщение 134504)
што???

дайте примеры строк, которым оно будет соответствовать

В смысле? Будет текстовый input, в него пользователь должен будет ввести набор цифр, после чего проверка, то есть будет выдаваться ошибка в случае, если пользователь введёт либо буквы, либо символы, либо ничего, а срабатывать форма будет в случае, если в поле будет только от 2 до 6 цифр :)

Для этого и нужно регулярное выражение, которое будет вноситься в переменную:
var reg_text = /[0-9]{2,6}/;

После чего идёт условие на проверку... :-?

Electron 07.11.2011 12:42

Сам, кажется, разобрался: /^\d{2,6}$/

trikadin 07.11.2011 13:06

Electron, вообще, можно ловить нажатия клавиш (onkeydown, onkeypress, onkeyup), и проверить, было ли введённое пользователем цифрами. Правда, учтите при этом, что есть ещё служебные клавиши - такие как Ctrl, Shift, Home, End, стрелочки, в конце концов.

Ну и в конце проверка регулярками всё равно не помешает.

Electron 07.11.2011 13:33

Разве вариант с регулярными выражениями не проще? ;)

Блин, снова этот дебильный движок сайта...
из этого:
/^\d{2,6}$/
делает это:
/^\d$/
Он преобразует некоторые символы в спецсимволы, и естественно всё не работает...

Можно ли в JS избежать данных спецсимволов? :write:

trikadin 07.11.2011 16:24

Хм. Вы не можете отключить обработку некоторых файлов? Не поверю, что невозможно обойтись без обфускации. Должен быть какой-то вариант обхода.

Electron 07.11.2011 18:50

Вроде нет, есть только выполняющий обратное действие BB-код...
В общем вынес JS-код в отдельный файл, вроде пока работает :)
Надеюсь с этим всё, всем, кто помогал - спасибо :dance:

trikadin 07.11.2011 19:24

Цитата:

Сообщение от Electron
В общем вынес JS-код в отдельный файл, вроде пока работает

А он у вас не там был? Это вы зря.

Electron 08.11.2011 10:34

Цитата:

Сообщение от trikadin (Сообщение 135034)
А он у вас не там был? Это вы зря.

Да, просто ради 10 строчек когда выносить в отдельный файл, при том что скорость FTP ничтожная... Почему зря то? :)

melky 08.11.2011 10:47

я могу(нет, не могу) позавтракать в туалете - а что, всё равно скоро туда же идти ?

Electron 08.11.2011 11:41

Блииин, новая проблема появилась... =/

Возможно ли на JS сделать такое: пользователь выбирает определённый радиобокс, затем нажимает на кнопку (обработка формы) и в зависимости от этого идёт автоматическое скачивание разных текстовых файлов. Это реально сделать средствами JavaScript? Существует ли вообще такая команда, или можно как-нибудь поиграть с "window.location.href"?

Может у кого ссылка имеется на статью, заранее спасибо ;) (Что за бред?)

Electron 11.11.2011 10:58

Всё получилось тупо открытием файла в новом окне:
window.open('/document.doc')

Всё остальное сделал на PHP (обработку формы, извлечение переменных и отправку письма)...

Как в условии записать, что они должны быть выполнены оба?
То есть так форма обрабатывается при удовлетворении одному из условий:
if ((reg_text.exec(text) == null) && (reg_mail.exec(mail) == null))

А нужно чтобы форма обрабатывалась только при удовлетворении обоих условий :-?

trikadin 12.11.2011 03:18

ЩИТО?

alert(!!( 1 && 0 ));

Electron 14.11.2011 11:42

Я ж туплю, мне нужно использовать логическое ИЛИ (||), а не логическое И (&&) :D


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