Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Какой алгоритм поиска функции, что срабатывает по определённому событию?

Здравствуйте! Сейчас столкнулся с задачей - найти функцию, что выполняется при определённом событии, и привязать её к другому событию. Конкретнее - есть такой плагин для вордпресс - Contact Form 7. При нажатии кнопки submit - происходит валидация полей, и если она не пройдена - выскакивают подсказки, какие поля обязательные.
После повторного нажатия кнопки submit - все подсказки автоматически удаляются и валидация происходит заново. Мне нужно найти функцию, которая удаляет все эти подсказки. Как это правильно сделать?
Ответ: Можно на событие submit формы (либо на click кнопки) навесить обработчик, который будет удалять tooltips.
Главное, чтобы этот сценарий срабатывал после валидации формы.
Вопрос: Чтобы в flash игре после определённого события переходило на определённую страницу

Как сделать так, чтобы в flash игре после определённого события переходило на определённую страницу сайта? Т. е у меня есть игра. Хочу чтобы после проигрыша перебрасывало на одну страницу в браузере, а после выигрыша на другую.
Ответ: А что не получается?
Вопрос: Функция срабатывает только при втором клике

Добрый день!
Есть функция:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    var titleBlockA = document.querySelector('.calculator');
    var contentBlockA = document.querySelector('.calculator-hidden');
 
    titleBlockA.addEventListener('click', function () {
        if ('none' == contentBlockA.style.display) {
            contentBlockA.style.display = 'block';
            titleBlockA.style.marginBottom = '0';
            titleBlockA.style.borderRadius = '10px 10px 0 0';
            }
            else {
              contentBlockA.style.display = 'none';
            titleBlockA.style.marginBottom = '7px';
            titleBlockA.style.borderRadius = '10px';
        }
    });
При первом открытии страницы, функция срабатывает только после двух кликов, а потом срабатывает уже с первого раза.
Как это можно исправить?

Тут более наглядно.
Ответ:
Сообщение от spiegel
Нет, а как это делать?
В современных браузерах есть средства разработчика. в Опере например активируется по CTRL+SHIFT+J.
В Мозилле ставится FireBug (хотя есть и встроенный отладчик).
Ну а дальше в отладчике ставится точка прерывания в нужный участок кода и производится отладка чтоб понять как этот код работает.
Вопрос: Как из функции, вызываемой по событию, вернуть значение?

Дано: функция, вызываемая по событию. Требуется вернуть значение функции.
Конечно, можно использовать глобальную переменную для передачи туда результата, но делать это как-то не хочется.
Если путей решения несколько - перечислите их, пожалуйста. И заранее говорю спасибо всем участникам )

<html>
	<head>
	</head>	
	<body>
		<button id='id_button'>Функция умножения</button>
	</body>
</html>

<script>	
	function mul() {
		var a = 2;
		var b = 3;
		var result = a * b;
		return result;
	}

	document.getElementById('id_button').onclick = mul;	
	// alert( ??? ) /* Как вывести результат на экран? /*
</script>
Ответ: отдельный неймспейс, замыкание, проброс через коллбек.
Вопрос: Запуск функции через определенное время

помогите, пожалуйста, сделать запуск функции через определенное время.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const text = "Hello world";
    const textParagraph = document.getElementById('text');
 
        function printLetterByLetter(destination, message, start) {
            var i = 0;
            var interval = setInterval(function () {
                destination.innerHTML += message.charAt(i);
                i++;
                if (i > message.length) {
                    clearInterval(interval);
                }
            }, start);
        }
 
    printLetterByLetter(textParagraph, text, 100);
Ответ: oleg28,
Javascript
1
2
3
setTimeOut(function() {
    printLetterByLetter(textParagraph, text, 100);
}, time); //time время через которое состоится запуск;
Вопрос: Работа jquery-ui sortable нарушается обработчиком click (срабатывает при отпускании)

Имеется такой код
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
var imgDiv = $('#img-div'), imgList = $('.p__image', imgDiv);
 
imgList.sortable({containment: "parent"});
 
imgList.on('click', '.img__close, .img__cell', function(e) {
    e.preventDefault();
    var el = $(this);
    if(el.hasClass('img__cell'))
        el.prependTo(imgList);
    else
        el.parent().unbind('mouseenter').trigger('mouseleave').remove();
    return false;
});
Плагин sortable обеспечивает драг н дроп элементов. Обработчик клика на imgList делает элемент первым.
Проблема в том, что при перетаскивании элемента, в момент его отпускания срабатывает обработчик события click.
Непонятно, почему происходит событие click, когда должно быть вроде бы mouseup.
В результате, любой перетаскиваемый элемент становится первым, после того как мы его отпускаем.
Ответ:
Сообщение от eugenex
при перетаскивании элемента, в момент его отпускания срабатывает обработчик события click.
Непонятно, почему происходит событие click, когда должно быть вроде бы mouseup.
Почитайте внимательно про события мыши, и тогда не будет вопросов. Click - это последовательность mousedown и mouseup. И в вашем случае, естественно, следом за mouseup тут же срабатывает click.
Вопрос: Неправильно срабатывает обработчик событий

В общем не могу разобраться в чем косяк!
В общем при первом нажатии medals.click все работает отлично, при втором medals.click неправильно работает обработчик rightButtonScroll.click... срабатывает сразу несколько раз и выдает последний результат!

var medals = $(".medalBlock a");
var sportsmen = [medalists.Gold, medalists.Silver, medalists.Bronse];
var num, medalNum;

medals.click(function() {
    
    num = 0;

    if (this === medals[0] ) { medalNum = 0; }
    if (this === medals[1] ) { medalNum = 1; }
    if (this === medals[2] ) { medalNum = 2; }
  
    rotateSportsmenList();

    rightButtonScroll.click(function() {     
        if ((num+1) < sportsmen[medalNum].length) { 
            num++; 
            rotateSportsmenList();
        }
    });

    leftButtonScroll.click(function() {     
        if (num > 0) { 
            num--; 
            rotateSportsmenList(); 
        }
    });

    function rotateSportsmenList(){
        statusScroll.text(num+1 + " из " + sportsmen[medalNum].length);
        nameSportsmenBlock.html(sportsmen[medalNum][num].name);
        $(".sportsmenImgBlock a").css({background: "url("+sportsmen[medalNum][num].imagesURL +") no-repeat"});
        sportsmenBiographyBlock.text(sportsmen[medalNum][num].biography);
    }

});



кстати, раз уже спрашиваю, то почему-то не работает конструкция для данного когда:

for (var i = 0; i < medals.length; i++) {
    (function(k) {
        medals[k].click(function(e) {
         
        });
    })(i);
}


только давайте без мата, и без тупых советов типа "иди еще раз прочитай главу о замыканиях"! если нету желания помочь - то иди себе мимо с Богом!)
Ответ:
Сообщение от inflexible
иди еще раз прочитай главу о замыканиях
Все правильно вам советовали. Надо еще раз завернуть все медали в div который и контролировать и тогда не придется развешивать на все медали функцию в цикле. Навскидку останется процентов 10 от этой тряхомудии.
Вопрос: Почему функция срабатывает только 1 раз

Тесть после 5 сек выводится google но через следующие 5 сек почемуто google так и остается а должно вывести Поиск....
Помогите разобраться
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
var q,w;
q=1;
function time(){
 
if(q=='1')w='google';
if(q=='0')w='Поиск <img src="poisk.gif" width="20">';
var z=document.getElementById("0");
z.innerHTML=w;
if(q=='1')q='0';
if(q=='0')q='1';
}
setInterval( time, 5 * 1000 );
Ответ:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
var q,w;
q=1;
function time(){
 
if(q=='1')w='google';
if(q=='0')w='Поиск <img src="poisk.gif" width="20">';
var z=document.getElementById("0");
z.innerHTML=w;
if(q=='1')q='0'; else
if(q=='0')q='1';
}
setInterval( time, 5 * 1000 );
Добавлено через 50 секунд
И ещё: не стоит начинать id элементов с цифры. Это довольно грубое нарушение.
Вопрос: Написать функцию-обработчик для события нажатия на клавишу

По нажатию пользователя на какую-либо клавишу на клавиатуре должно выдаваться сообщение о том, какую клавишу пользователь нажал. onkeydown
Ответ: AlexMoth, вот тоже примерчик:
Кликните здесь для просмотра всего текста
Код HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html>
<head>
<title>Определение нажатой клавиши</title>
<meta charset="utf-8">
<script type="text/javascript">
function showKeyPress(evt)
{
alert("Вы нажали клавишу: \n" + String.fromCharCode(evt.charCode) + "\n");
}
</script>
</head>
<body  onkeypress="showKeyPress(event);">
</body>
</html>

Но есть одно НО, данный скрипт не позволяет обрабатывать нажатие функциональных клавиши(вроде ctrl, alt или F1) - зато показывает какие буковки или цихровки были нажаты...
Вопрос: Какой резон передавать функции в другое место?

Читаю . Хотя, это не первое упоминание о такой возможности, но. тем не менее, очередной раз я об этом услышал, но никаких доводов логичных для подобных возможностей в языке не сказано.
Вот пример:
var f = function factorial(n) {
  return n ? n*factorial(n-1) : 1;
};

var g = f;  // скопировали ссылку на функцию-факториал в g
f = null;

alert( g(5) ); // 120, работает!

Я вижу это так:
1. Копирование функции в другую переменную производить дублирование кода.
2. Увеличивает количество используемой памяти.
Ведь если есть функция, и она работает как нужно, то её нужно использовать, а не копировать куда-то, а потом использовать под другим именем. Абсурд какой-то, на первый взгляд.
Вот и хочется увидеть адекватный вариант применения такого похода, если, конечно, кто-нить это вообще использует.
Ответ: hoz,
почитайте про замыкания в яваскрипте, когда из функции возвращается другая ф-я. Там эта возможность широко используется.

Для объектов/массивов очевидное применение - передача параметров в функцию по ссылке, чтобы не копировать большие объёмы данных лишний раз.