Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Подмена части функции в onClick

пишу user.script для GoogleChrome

Есть страница, на ней таблица в одну колонку, для каждого td таблицы определен onClick в виде:
onClick="var e = 1; LoLoLo(1,2,3); BlaBla(3,6,2); e = e + LaLaLa(5,6,5);"
причем, для каждого td это описание сильно разнится.
Задача состоит в том, что бы выполнить некоторые действия на страничке после выполнения функции BlaBla().

Как вариант, пробовал просто в user.script скопировать функцию, но не срабатывает.

PS. Функция добавляет в некоторые места странички новые элементы (иногда добавляет, иногда нет) с форматированием, заданным внутри тега (<td style='color: red;'>), без объявления классов или ID, по этому через css поменять оформление проблематично. user.script отрабатывает после загрузки страницы, но до запуска этой функции.
Ответ:
пишу user.script для GoogleChrome

Есть страница, на ней таблица в одну колонку, для каждого td таблицы определен onClick в виде:
onClick="var e = 1; LoLoLo(1,2,3); BlaBla(3,6,2); e = e + LaLaLa(5,6,5);"
причем, для каждого td это описание сильно разнится.
Задача состоит в том, что бы выполнить некоторые действия на страничке после выполнения функции BlaBla().

Как вариант, пробовал просто в user.script скопировать функцию, но не срабатывает.

PS. Функция добавляет в некоторые места странички новые элементы (иногда добавляет, иногда нет) с форматированием, заданным внутри тега (<td style='color: red;'>), без объявления классов или ID, по этому через css поменять оформление проблематично. user.script отрабатывает после загрузки страницы, но до запуска этой функции.
Вопрос: Как сделать переменную функции onclick глобальной?

Есть такой работающий html код меню c радио кнопками и скрипт, показывающий значение выбранной по onclick радио кнопки в теле функции check(met), оператор alert('1 mtd= ' + mtd);. Проблема в том, что переменная mtd не видна за пределами функции check(met), хотя она объявлена как глобальная. Оператор return тоже не возвращает ее значение. Вопрос как сделать так чтобы переменную mtd можно было видеть во всем скрипте. Например, использовать в функции sum();. Конечно, если функцию sum() вложить в функцию check(met), то она будет работать, но хотелось бы чтобы все работало автономно. Извините за возможно не корректный вопрос.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-UTF-8"/>
<title>Gr</title>
</head>
<body>
<form id="mainForm" name="mainForm" action="">
<input id=gr1 type="radio" name="met" onclick="check(this.value)" value="1">
G-1<br>
<input id=gr2 type="radio" name="met" onclick="check(this.value)" value="2">
G-2<br>
<input id=gr3 type="radio" name="met" onclick="check(this.value)" value="3">
G-3<br>
<input id=gr4 type="radio" name="met" onclick="check(this.value)" value="4">
G-4<br>
<br>
</form>
<script>
var mtd;
function check(met) {
mtd = document.getElementById.value = met;
alert('1 mtd= ' + mtd);
return met;
}
alert('2 mtd= ' + mtd);
function sum() {
var x = mtd + 5;
alert('x=' + x);
}
sum();
</script>
</body>
</html>
Ответ:
Сообщение от ermak20
Сделал так
Вариант без цикла...

<form id="mainForm" name="mainForm" action="#">
  <input id=gr1 type="radio" name="met" value="1">G-1
  <br>
  <input id=gr2 type="radio" name="met" value="2">G-2
  <br>
  <input id=gr3 type="radio" name="met" value="3">G-3
  <br>
  <input id=gr4 type="radio" name="met" value="4">G-4
  <br>
</form>
<script>
document.getElementById("mainForm").addEventListener("click", function () {
	var mtd = document.querySelector('[name="met"]:checked');
	if (mtd) {
		alert("mtd = " + mtd.value);
		var x = +mtd.value + 5;
		alert("x = " + x);
	};
});
</script>
Вопрос: Вызов функции OnClick()

Приветствую.
Есть объект, у него есть атрибут 'onclick', выглядит примерно так:
HTML5
1
<table onclick="Open(this)"</table>
Можно вызвать функцию, если известно ее имя, например так:
Javascript
1
window[ funcName ]();
И вроде еще можно так:
Javascript
1
eval( funcName )()
Вот что мне выдает браузерная консоль:
HTML5
1
2
3
4
window[ Open(this )]()
TypeError: undefined is not a function
eval( Open(this) )()
TypeError: boolean is not a function
Возможно дело в аргументе 'this' или я что-то не так делаю, подскажите, пожалуйста.
Ответ: Разобрался почему консоль выдавала ошибку:
HTML5
1
2
eval( Open(this) )()
TypeError: boolean is not a function
В данной функции были кое какие проверки, и если эти проверки не проходили, то функция возвращала false, в ином случае, функция делала что должна. Достаточно было подменить значения так, чтобы они прошли проверку. А далее eval(), сделал свое дело.
Вопрос: Функция onclick в цикле

Добрый день!
Помогите, пожалуйста, решить задачу. Нужно что бы при клике по диву, выскакивал алерт с номером.
Что у меня не так?
<div class="test">
    111
</div>
<div class="test">
    222
</div>
<div class="test">
    333
</div>
<div class="test">
    444
</div>

<script>
    var per = document.getElementsByClassName("test");
    var i;
    for(i=0; i<per.length; i++){
        per[i].onclick = function(){
            alert(i);
        };
    }
</script>
Ответ: Здорово!
Буду переваривать, спасибо!
Вопрос: Как правильно вызвать функцию onclick? Странные тонкости или ошибки подключения модулей?

Проблема с подключением скриптов.
Суть в том, что если функцию вызывать из подключаемого файла скрипта - функция срабатывает.
Но если её же вызывать через onclick в ссылке, то пишет что не определена.
Подскажите пожалуйста, где может быть ошибка или в какую сторону копать для того, чтобы разобраться в этом?

Файл gaTracking
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var export_object = {
    event : event,
    click : click
}
 
function event(category,action,param) {
    ga('send', 'event', category, action, param);
    return;
}
 
function click(link,category,action,param){
    event(category,action,param);
    setTimeout('document.location = "' + link.href + '"', 200);
    alert("test");
    return;
}
 
module.exports = export_object;
Вызов файла в main.js
Javascript
1
var gaTrack = require('./gaTracking');
Вызов в main.js - работает (при загрузке страницы)
Javascript
1
gaTrack.click('youtube', 'transition to youtube', 'click on link image');
Вызов через html - не работает (в index.html)
HTML5
1
    <li><a href="google.com" target="_blank" onclick="gaTrack.click('youtube', 'transition to youtube', 'click on link image')">google</a></li>
Ответ: да, конечно. в этом то и проблема
Вопрос: Как к вызову функции по onclick добавить еще одно условие?

Дано: кнопка и некая функция, которая вызывается по нажатию этой кнопки. Вопрос: как к вызову функции по событию "прикрутить" радиокнопку?

<html>
<body>
<button id="but_id">click me</button>
<input type=radio name='radiobutton' value="1" id="labeled_1" checked/>
<input type=radio name='radiobutton' value="2" id="labeled_2"/>
</body>

<script>
function myAlert() {
alert("Функция вызвана");
}

var stateRadio = document.getElementById('labeled_1').value; // состояние радиокнопки

// радиокнопку надо "прикрутить" на условие вызова функции как-то так:
<stateRadio==1> И <but_id.onclick> = myAlert;

</script>
</html>

P.S. Не стреляйте в нуба - он пишет как умеет )
Ответ:
Сообщение от newcoolguru
but_id.onclick = function(){
  labeled_1.checked && alert(1);}
Так как у Вас не работает, вот так работает:
but_id.onclick = function(){
if(labeled_1.checked) myAlert();}
Вопрос: Конфликт onmousedown и onclick

После того, как срабатывает onmousedown не выполняются события, связанные с onclick. Вот код - . Зажимаете левую кнопку мыши, двигаете курсор - появляется выделяющий блок. Все норм. Но вот попробуйте кликнуть на ссылку - облом.

При этом, если закомментить в onmousedown событии строку div.hidden = 0; , то все будет работать прекрасно. Извивался и так и сяк - но если в функции события выполняется обращение к ДОМ, следующие события обламываются.

При этом всем событие onmouseup отрабатывает исправно. Не срабатывает только onclick, который вообще идет после onmouseup, но конфликтует именно с onmousedown.

В коде есть закомментированные участки с setTimeout(). С ними работает, но бывают глюки. А я хочу без глюков.

Что же делать, как же быть?
Ответ:
Сообщение от xbit
а маусап
Нельзя начать рисовать с поднятия пера. Все 4 координаты должны быть выставлены в начальную точку когда "перо" опущено. Это же плоттерная вся технология в мыше. Перо поднять, перенести на икс игрек, опустить, перенести на икс, игрек и так далее.

Ну и мув не должен ничего писать в координаты пока перо не опущено, то есть кнопка не нажата. Функции таскания элементов по странице так и работают - выставляют листенер на мув когда нажато и снимают когда отпущено, просто потому что нафиг не надо грузить комп бесполезными делами.
Вопрос: Не могу привязать обработик onClick

Вот простейший код - назвать *.js.
В кратце - из скрипта создается объект броузера, в который выводится кнопка - ее событие onclick надо привязать к функции из скрипта click_Cr2Note() ... Cама кнопка из скрипта доступна - ее название меняется IE.document.getElementById('Cr2Note').value='Уб� �ть 2 блокнота';.... а вот обработчик нажатия не хочет. ПОМОГИТЕ ПОЖАЛУЙСТА и если можно объясните в чем проблема
--------------------------
function click_Cr2Note()
{
WScript.Echo("2 NotePad opened");
}


function Output()
{
//Открываем окно IE и выводим в него форму
var IE= new ActiveXObject ("InternetExplorer.Application");
IE.Navigate("about:blank"); while (IE.Busy) WScript.Sleep(100);
IE.Document.write(
"<HTML><HEAD><meta http-equiv='Content-Type' content='text/html; charset=utf-8'></HEAD><BODY><FORM><INPUT TYPE='button' id='Cr2Note' value='Создать 2 блокнота';");
IE.Document.write("</FORM><script language='JavaScript'>;");
IE.Document.write("</script></BODY></HTML>");
with (IE) {AddressBar=false; MenuBar=false; ToolBar=false; StatusBar=false; Width=100; Height=40; Visible=true;};
return IE;
}

IE=Output();
WScript.Sleep(3000);

IE.document.getElementById('Cr2Note').onClick='cli ck_Cr2Note';
IE.document.getElementById('Cr2Note').value='Уб� �ть 2 блокнота';
---------------------------
Ответ: Мб надо конструировать функцию внутри, т.к. внешняя не пробрасывается и вообще считается неведомым объектом. Тут надо курить мсдн, как вся эта хренотень у них работает.
Если нужно сразу окно IE - юзайте hta.
Вопрос: onclick на ссылке

Всем привет) Как изменить содержание параграфа после клика по ссылке?
Делаю так:
function text(a){

<script language="javascript">
function text(){
var a = document.getElementById('par');
a.innerHTML = 'измененный текст параграфа';
}
</script>
<p id="par"></p>
<a href="javascript:void(0)" onclick="text('#par');">Ссылка</a>
<textarea onclick="text()"></textarea>

клик по ссылке не работает, а по полю работает, почему?)


И почему не работает такая конструкция:

<script language="javascript">
function text(a)
{
a.innerHTML = 'измененный текст параграфа';
}
</script>
<p id="par"></p>
<a href="javascript:void(0)"onclick="text('#par');">� �сылка</a>
<textarea onclick="text('#par')"></textarea>
Ответ: Я один элемент могу только удалить, потом ниче не выходит???
После вызова функции ff в обработчике перестает работать, как это исправить и почему так?

так что никто не знает?
Вопрос: Событие onclick и контект вызова

Есть след. код:
<body>   
	<button onclick='timer()'>Десятичный таймер секунд</button>
	<button onclick='timerBinary()'>Бинарный таймер секунд</button>

	<p id='paragraph' style='font-size:200px' align='center'></p>
    </body>
	
	<script>
	function timer(){
		var timer = setInterval(function(){
		var z = document.getElementById('paragraph');
		var date = new Date();
		z.innerHTML = date.getSeconds();}
		, 1000);
	}
	
	function timerBinary(){
		var timerBinary = setInterval(function(){
		var z = document.getElementById('paragraph');
		var date = new Date();
		z.innerHTML = (date.getSeconds()).toString(2);}
		, 1000);
	}
	
	</script>

При нажатии на некоторую кнопку, выполняется нужно событие и выводится таймер секунд в том или ином формате.
Окей, но хочу добавить код, чтобы было так: если один из таймеров уже включен, а я нажал на новый, то старый просто переставал работать. Т.е. нужно выполнить clearInterval.
Но как правильно указать контекст вызова этого метода? Читаю, но пока не понятно.
Ответ: Сохранять отдельно надо. Если таймер всегда должен быть в одном экземпляре, то проще всего сделать так:
function timer(){
  clearInterval(timer._interval);
  
  timer._interval = setInterval(function(){
    //код
  }, 1000);
}
или так
function timer(){
  if(timer._interval) return; //просто ничего не делаем, раз уже запущен
  
  timer._interval = setInterval(function(){
    //код
  }, 1000);
}
Т.к. функции в js - объекты, тут мы просто назначаем свойство с нужным значением.