Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.01.2015, 21:00
Интересующийся
Отправить личное сообщение для klk.pma Посмотреть профиль Найти все сообщения от klk.pma
 
Регистрация: 30.06.2014
Сообщений: 23

Передача значения элемента без применения атрибута
Добрый день!
Я на сайте использую вот такой вариант:
<input id="pole" type="text" onclick="run(this.value)" value="Значение!"/>

function run(in) {
  alert(in);
}


Но хочу отказаться от исползования атрибута и сделать в таком виде:
<input id="pole" type="text" value="Значение!"/>

function run(in) {
  alert(in);
}
document.getElementById('pole').onclick = run;


Но столкнулся с проблемой: в текущем варианте я передаю в функцию значение поля (this.value), а вот в новом варианте почему-то не получается передать это значение.
Пожалуйста, подскажите как это правильно реализовать?

Последний раз редактировалось klk.pma, 20.01.2015 в 21:03.
Ответить с цитированием
  #2 (permalink)  
Старый 20.01.2015, 21:07
Аспирант
Посмотреть профиль Найти все сообщения от registrant
 
Регистрация: 15.01.2015
Сообщений: 39

<!DOCTYPE html>
<html>
<head>

</head>
<body>

<input id="pole" type="text" value="Значение!"/>
<script>
document.querySelector("#pole").onclick=function run() {
	  alert(['Спасибо!', this.value]);
	}

</script>
 
</body>
Ответить с цитированием
  #3 (permalink)  
Старый 20.01.2015, 21:25
Интересующийся
Отправить личное сообщение для klk.pma Посмотреть профиль Найти все сообщения от klk.pma
 
Регистрация: 30.06.2014
Сообщений: 23

Спасибо! Вариант рабочий, но только если писать в html документе скрипт, а вот если выносишь это в отдельный js файл, то это уже не работает. Пробовал в файле писать
var in=document.getElementById('pole').value;
Почему-то не работает.
Пожалуйста, подскажите что необходимо для работы этого похожего кода в подключаемом файле? Чем заменить this.value в подключаемом файле?

Последний раз редактировалось klk.pma, 20.01.2015 в 21:40.
Ответить с цитированием
  #4 (permalink)  
Старый 20.01.2015, 21:57
Аспирант
Посмотреть профиль Найти все сообщения от registrant
 
Регистрация: 15.01.2015
Сообщений: 39

klk.pma,
Все должно работать. Посмотрите на порядок загрузки скриптов. Тот скрипт, в котором выполняется данный код, подключите перед закрывающим тегом body, например.

И не используйте in в качестве переменной, это часть синтаксиса, у Вас там ошибку должно показывать
Ответить с цитированием
  #5 (permalink)  
Старый 20.01.2015, 22:11
Интересующийся
Отправить личное сообщение для klk.pma Посмотреть профиль Найти все сообщения от klk.pma
 
Регистрация: 30.06.2014
Сообщений: 23

это я не дописал. Использую - item вместо in. Но все равно не работает.
Ради интереса написал отдельный пример:
<!DOCTYPE>
<html>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<head>
<script language="JavaScript" src="new2_files/scrjs.js"></script>
</head>
<body>
<div id="stra">
	<form>
	<input id="pole" type="text" value="Из файла"/>
	<input id="pole2" type="text" onclick="run(this.value)" value="Атрибут"/>
	</form>
</div>                                                                                                             
							
</body>
</html>


function run() {
	alert('atribut');
}

var elem=document.getElementById("pole");
if(elem) alert(elem);
else alert('no obj');


Так вот при нажатии на pole все работает. А при нажатии на pole2 выдает сообщение no obj. Теперь вообще ничего не понимаю, полная каша в голове.
Ответить с цитированием
  #6 (permalink)  
Старый 20.01.2015, 22:26
Аспирант
Посмотреть профиль Найти все сообщения от registrant
 
Регистрация: 15.01.2015
Сообщений: 39

klk.pma,
я же написал
Цитата:
Посмотрите на порядок загрузки скриптов. Тот скрипт, в котором выполняется данный код, подключите перед закрывающим тегом body, например.
вот так пробуйте
<!DOCTYPE>
<html>
<head>
</head>
<body>
<div id="stra">
    <form>
    <input id="pole" type="text" value="Из файла"/>
    </form>
</div>                                                                                                            
                             

<script src="new2_files/scrjs.js"></script>
</body>
</html>

Содержимое файла new2_files/scrjs.js:
document.querySelector("#pole").onclick=function runFromFile() {// имя ф-ции в данном случае не обязательно
    alert(this.value);
}

Последний раз редактировалось registrant, 20.01.2015 в 22:29.
Ответить с цитированием
  #7 (permalink)  
Старый 20.01.2015, 22:31
Интересующийся
Отправить личное сообщение для klk.pma Посмотреть профиль Найти все сообщения от klk.pma
 
Регистрация: 30.06.2014
Сообщений: 23

Спасибо! А возможно как-то сделать чтобы все это работало в файле подключаемом в head?
Ответить с цитированием
  #8 (permalink)  
Старый 20.01.2015, 22:37
Аспирант
Посмотреть профиль Найти все сообщения от registrant
 
Регистрация: 15.01.2015
Сообщений: 39

Сообщение от klk.pma
А возможно как-то сделать чтобы все это работало в файле подключаемом в head?
да, например
<!DOCTYPE>
<html>
<head>
<script>
//нижеследующий код в твоем скрипте:
window.onload=function(){
document.querySelector("#pole").onclick=function runFromFile() {
    alert(this.value);
}
}
</script>

</head>
<body>
<div id="stra">
    <form>
    <input id="pole" type="text" value="foo"/>
    </form>
</div>                                                                                                            
                             
</body>
</html>

Только, зачем? Какая разница где он подключен?
Ответить с цитированием
  #9 (permalink)  
Старый 20.01.2015, 22:39
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от klk.pma
бы все это работало в файле подключаемом в head?
В head скрипт будет выполнятся ДО того как распарсится и будет готово тело (body) документа. А значит и onclick нельзя навесить, потому как элемент попросту еще не существует.
Подключать скрипты в конце <body> - стандартная практика, это одна из первых рекомендации по оптимизации скорости сайта.

Но если очень хочется - вешаешь обработчик на событие document@DOMContentLoaded (записал условно: объект@событие) - это событие завершения загрузки HTML-кода страницы (и соотв-но, разбора и формирования DOM).

Есть еще событие window@load - оно происходит позже - оно ожидает окончания загрузки внешних ресурсов (в основном картинок). Это событие не рекомендуется использовать.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 21.01.2015, 09:09
Интересующийся
Отправить личное сообщение для klk.pma Посмотреть профиль Найти все сообщения от klk.pma
 
Регистрация: 30.06.2014
Сообщений: 23

registrant и danik.js Спасибо вам за помощь и разъяснения!
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменение значения элемента display (Sandr) Общие вопросы Javascript 15 08.02.2017 10:28
Передача полю объекта - массиву, значения элемента через set метод poorking Общие вопросы Javascript 1 13.02.2011 20:22
Задание значения элемента формы и submit Enklgd01 Общие вопросы Javascript 4 28.09.2010 11:24
Передача значения ssh AJAX и COMET 4 21.02.2010 21:59
передача значения предыдущего элемента ani_jery jQuery 1 16.10.2009 17:24