Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886

Вызов функции при клике

19.08.2015, 14:51. Показов 2634. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
JavaScript
1
2
3
4
5
<script type='text/javascript' >
   function MyFunc(S){
       alert(S);  //показываю принятый текст.
   }
</script>
JavaScript
1
2
3
4
5
6
<div id="id2" >
Кликни меня
<script>
document.getElementById("id2").onclick = MyFunc(<?php echo '100'; ?>);
</script>
</div>
По нажатию на "Кликни меня" должно выскочить alert с текстом 100.

У меня так получается, что при загрузке страницы вылезает это 100, а надо, чтобы я кликнул по тексту и оно вылезло.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.08.2015, 14:51
Ответы с готовыми решениями:

Вызов функции при клике на кнопку
Здравствуйте. Проблема собственно вот в чем. Вешаю вызов функции на кнопку &lt;input type=&quot;submit&quot; name=&quot;enter&quot;...

Вызов функции при клике на ячейку таблицы
Есть таблица. Требуется каждой ячейке (td) установить вызов одной функции, но с разными параметрами (номер строки и столбца ячейки). Есть...

Вызов div при клике
Имеется ссылка вида: &lt;a href=&quot;#&quot; id=&quot;l&quot;&gt;Ссылка&lt;/a&gt; При клике нужно вызвать div с id=&quot;openModal&quot; Как...

22
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
19.08.2015, 15:00
Лучший ответ Сообщение было отмечено daslex как решение

Решение

daslex,
JavaScript
1
document.getElementById("id2").onclick = MyFunc.bind(null,<?php echo '100'; ?>);
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
19.08.2015, 15:08  [ТС]
Так сработало. Только если я использую не явное значение, а взятое из переменной php, то что-то не так получается.

JavaScript
1
document.getElementById("id2").onclick = MyFunc.bind(null,<?php echo $arr[0]; ?>);
$arr[0] - это ячейка массива с некоторым текстом.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
19.08.2015, 15:15
daslex, у меня складывается ощущение, что вы не знаете ни php, ни js

будет

Добавлено через 3 минуты
daslex, у меня складывается ощущение, что вы не знаете ни php, ни js

будет работать
1
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
19.08.2015, 15:16
JavaScript
1
2
3
<div id="id2" data-id="100" onclick="alert(this.getAttribute('data-id'))">
Кликни меня
</div>
data-id="<?php echo $arr[0]; ?>"
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
19.08.2015, 15:21  [ТС]
Я не знаю. ни одного языка. Ничего не поделать.

Я знаю, что на сайте WordPress эта конструкция ломает внешний вид страницы.
Вот 2 скрина. Справа изначально, слева после применения показанного тут кода. (для переменной из php)
Миниатюры
Вызов функции при клике   Вызов функции при клике  
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
19.08.2015, 15:22  [ТС]
Poznakomlus, нужен вызов функции, в которой несколько строчек кода. Это просто сокращенный вариант.
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
19.08.2015, 15:28
HTML5
1
2
3
4
5
6
7
8
<div id="id2" data-id="100" onclick="test(this)">
Кликни меня
</div>
<script>
function test(el){
    alert(el.getAttribute('data-id'));
}
</script>
вариантов может быть много
HTML5
1
2
3
4
5
6
7
8
9
10
<div id="id2" data-id="100">
Кликни меня
</div>
<script>
window.onload = function(){
    id2.onclick = function(){
        alert(this.getAttribute('data-id'));
    }
};
</script>
1
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
19.08.2015, 15:29
Лучший ответ Сообщение было отмечено daslex как решение

Решение

daslex, вы только аргументы и в функции запятыми отделяйте и в вызове
JavaScript
1
2
3
4
function test(a,b,c){
    alert(a,b,c)
}
document.getElementById("id2").onclick = MyFunc.bind(null,<?php echo join(',',$arr); ?>)
соответственно $arr - массив с аргументами, которые надо передать

Добавлено через 59 секунд
Poznakomlus, если использовать data-* то можно взять через .dataset, зачем же getAttribute
1
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
19.08.2015, 15:34
Цитата Сообщение от BANO Посмотреть сообщение
Poznakomlus, если использовать data-* то можно взять через .dataset, зачем же getAttribute
для этого нужно сранить
http://caniuse.com/#search=dataset
и http://caniuse.com/#search=getAttribute
getAttribute везде поддерживается
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
19.08.2015, 15:37
Poznakomlus, честно говоря я не вижу смысла делать через data-*, так как это привязанно к dom и соответственно уменьшает скорость

других аргументов в пользу своего рещения я не нашёл
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
19.08.2015, 15:41  [ТС]
BANO, Я попробовал
JavaScript
1
document.getElementById("id2").onclick = MyFunc.bind(null,<?php echo join(',',$arr[0]); ?>);
И функцию просто с 1 параметром. Страницу не испортило, но эффекта не дало. Это если jQuerry, то у меня пока не будет работать.
___________
Цитата Сообщение от Poznakomlus Посмотреть сообщение
вариантов может быть много
Только вот это в WordPress приводит к глюку, картинки выше.

JavaScript
1
<div id="id2"; data-id=<?php echo $arr[0];?>; >
JavaScript
1
2
3
4
5
6
7
<script>
window.onload = function(){
    id2.onclick = function(){
        alert(this.getAttribute('data-id'));
    }
};
</script>
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
19.08.2015, 15:49
Цитата Сообщение от BANO Посмотреть сообщение
я не вижу смысла делать через data-*
атрибуты могут иметь абсолютно любые названия не обязательно начинаться на data- главное, чтобы не конфликтовали с зарезервированными именами
Цитата Сообщение от BANO Посмотреть сообщение
так как это привязанно к dom и соответственно уменьшает скорость
вы даже не заметите
а теперь мой аргумент
js надо выносить в отдельный файл и не писать все в одной каше
мой код позволяет это сделать легко, а не строить js функцию динамически с помощью php
и не создавая js.php
PHP
1
2
3
4
<?php
header('Content-type: text/javascript; charset: UTF-8');
?>
alert('Это мой Js код');
Добавлено через 2 минуты
Цитата Сообщение от daslex Посмотреть сообщение
<div id="id2"; data-id=<?php echo $arr[0];?>; >
здесь забыли кавычки и лишнии ;
<div id="id2" data-id="<?php echo $arr[0];?>">
1
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
19.08.2015, 15:53
Цитата Сообщение от Poznakomlus Посмотреть сообщение
а не строить js функцию динамически с помощью php
и не создавая js.php
вот тут согласен
Цитата Сообщение от Poznakomlus Посмотреть сообщение
вы даже не заметите
а это не главное
.forEach и for тоже разницы почти нету, но всё же надо это учитывать при оптимизации
Цитата Сообщение от Poznakomlus Посмотреть сообщение
главное, чтобы не конфликтовали
вы мне дали ещё 1 аргумент в мою пользу, у меня вообще об этом задумываться не надо)))


<div id="id2"; data-id=<?php echo $arr[0];?>; >
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
19.08.2015, 16:02  [ТС]
Цитата Сообщение от Poznakomlus Посмотреть сообщение
здесь забыли кавычки и лишнии ;
HTML5
1
<div id="id2" data-id="<?php echo $arr[0];?>">
HTML5
1
2
3
<div id="id2" data-id="<?php echo $arr[0];?>">
Кликни меня
</div>
JavaScript
1
2
3
4
5
6
7
<script>
window.onload = function(){
    id2.onclick = function(){
        alert(this.getAttribute('data-id'));
    }
};
</script>
Глюк, который на картинках показан, все равно.


В общем, это уже не js, так что ответа не надо. Мне уже отвечали. Я просто подзабыл всё.
То, что я спросил сейчас - на это я получил несколько ответов. Спасибо.
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
19.08.2015, 16:09
Цитата Сообщение от BANO Посмотреть сообщение
forEach и for
о да это две темные лошадки ведь forEach не кросброузерный причем в js он медленный а в php наоборот в последних версия быстрый
daslex, попробуйте в функцию вконце вставить return false или так
JavaScript
1
2
3
4
5
id2.onclick = function(e){
        alert(this.getAttribute('data-id'));
        e.stopPropagation ? e.stopPropagation() : (e.cancelBubble=true); // отмена всплытия события
        e.preventDefault ? e.preventDefault() : (e.returnValue=false);   // отмена действия браузера по-умолчанию
}
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
19.08.2015, 19:29  [ТС]
Poznakomlus, тут глюк не из-за javascript, а из-за сложного текста в переменной php. Этот вопрос касается php.

Со всеми листингами javascript в этой теме всё в порядке.

Добавлено через 3 часа 7 минут
Я исправил php текст таким образом, чтобы javascript его переваривал. Но это не привело к решению.

Пост №2
JavaScript
1
document.getElementById("id2").onclick = MyFunc.bind(null,<?php echo $arr[0]; ?>);
Не ломает страницу. Но текст из arr[0] вместо того, чтобы отобразиться только после нажатия на текст из div, просто прописывается в эту страницу.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
19.08.2015, 19:59
daslex, вы в начале скрипта поставьте <!--
а в конце //-->
примерно так
HTML5
1
2
3
4
5
6
7
<script>
<!--
 
//.... тут уже ваш скрипт
 
//-->
</script>
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
19.08.2015, 23:59  [ТС]
Я немного запутался, и, может быть дезинформировал. c php было не до конца доделано. Сейчас доделал.

Почему-то с предложенным вариантом с явным указанием числа работает. С указанием ячейки массива не работает(вообще ничего не происходит).
При этом проверка ячейки массива явным выводом средствами php показывает, что текст там есть.

Вот такой текст в ячейке $arr[0] при проверке php.
Текст ячейки массива
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE HTML PUBLIC \’-//W3C//DTD HTML 4.01 Transitional//EN\’>
<meta http-equiv=\’content-type\’ content=\’text/html; charset=utf-8\’>
 
<link href=\’http://ci-plus-plus-snachala.ru/syntaxhighlighter_3.0.83/styles/shCore.css\’ rel=\’stylesheet\’ type=\’text/css\’/>
<link href=\’http://ci-plus-plus-snachala.ru/syntaxhighlighter_3.0.83/styles/shThemeDefault.css\’ rel=\’stylesheet\’ type=\’text/css\’/>
<script src=\’http://ci-plus-plus-snachala.ru/syntaxhighlighter_3.0.83/scripts/shCore.js\’ type=\’text/javascript\’></script>
<script src=\’http://ci-plus-plus-snachala.ru/syntaxhighlighter_3.0.83/scripts/shBrushCpp.js\’ type=\’text/javascript\’></script>
<script language=\’javascript\’>
SyntaxHighlighter.all();
</script>
 
 
<!—————-КОД—————————–>
<pre class=\’brush: cpp\’>
#include &lt;iostream&gt;
 
using namespace std;
 
int main(){
setlocale(LC_ALL,&quot;&quot;);
int Height,Weight;
 
cout&lt;&lt;&quot;Введите Ваш рост и вес:\\n&quot;;
cin&gt;&gt;Height&gt;&gt;Weight;
 
cout&lt;&lt;&quot;Ваш рост: &quot;&lt;&lt;Height&lt;&lt;endl;
cout&lt;&lt;&quot;Ваш вес: &quot;&lt;&lt;Weight&lt;&lt;endl;
 
}
</pre>
<!—————-КОД—————————–>


Использовал вот этот вариант.
JavaScript
1
document.getElementById("id2").onclick = MyFunc.bind(null,<?php echo $arr[0]; ?>);

Пока без последнего совета (на комментарии).
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
20.08.2015, 09:43
daslex, ещё можно попробовать переносы строк экранировать
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.08.2015, 09:43
Помогаю со студенческими работами здесь

Запуск функции открытия модального окна при клике по ссылке
Приветствую всех. Товарищи я в JavaScript вообще не силён, можно даже сказать полный 0, по этому обращаюсь за помощью. Предположим...

Срабатывают две функции при клике (один div сверху другого)
var qwer = 0 $(click_pod_menu).click(function(e){ qwer = (qwer ==0) ? 1 : 0; if (qwer == 1) { var e =...

Вызов функции при нажатии на кнопку
Ребят как вызвать функцию при нажатии на кнопку ? &lt;html&gt; &lt;head&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;...

Вызов функции при возникновении события
Здравствуйте! Я совсем новичок в JS, так что простите некоторую тупость. Мне нужно, чтобы в момент нажатия клавиши 'Enter', у меня...

Вызов функции при нажатии на кнопку
У меня есть кнопка Регистрация, и есть заданая функция в отдельном файле, который прикреплени к хтмл странице (javascript.js), как сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru