Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   проблема с onclick (https://javascript.ru/forum/misc/51866-problema-s-onclick.html)

Vladimir93 22.11.2014 21:26

проблема с onclick
 
Добавление к предыдущему посту. Создаем кнопку с помощью метода. Если метод без аргументов, то вызов выглядит примерно так
btn.onclick = sozdaemTriKnopki;
где sozdaemTriKnopki - это метод, который создает метод(причем почему без (), мне не ясно). Но когда в методе есть аргументы, например
btn.onclick = sozdaemTriKnopki(arg)
то выполнятся этот метод будет сразу при загрузке, а не при нажатии на кнопку. Как сделать, чтобы при нажатии?

Vladimir93 22.11.2014 21:42

Вопрос снимается. Если кому интересно, то нужно сделать так
btn.onclick = function() {sozdaemTriKnopki(arg);};

krutoy 22.11.2014 22:11

Еще можно так:
<!DOCTYPE HTML>
<html>
  <head><meta charset="windows-1251" /> </head>
  <body>
<button>foo</button>
<script>
mkButton=function(innerHTML){
  var button=document.createElement("button")
  button.innerHTML=innerHTML
  document.body.appendChild(button)
}
mkThreeButtons=function(innerHTML){
   return function(){
      mkButton(innerHTML)
      mkButton(innerHTML)
      mkButton(innerHTML)
   }
}
document.querySelector("button").onclick=mkThreeButtons("foo")
</script>
  </body>
</html>

kostyanet 23.11.2014 11:30

Цитата:

Сообщение от Vladimir93
btn.onclick = sozdaemTriKnopki(arg)

Срав ни:

var some_var = sozdaemTriKnopki(arg);

проперь .onclick - обычная переменная в объекте. Туда все и запишется сразу.

Цитата:

Сообщение от Vladimir93
btn.onclick = sozdaemTriKnopki;

Так и делают. Аргументы можно засунуть заранее в саму кнопку, скажем в data-arg. Который достанет функция и сделает что надо.

Или да, присваивают безымянную функцию переменной,

срав ни

var some_var = function(arg){};

kostyanet 23.11.2014 11:32

Цитата:

Сообщение от krutoy
Еще можно так:

Однохуйственно тому что ТС нашел, поскольку контекст не цепляется в кложе.


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