2015-07-01 4 views
-1

Когда я обновляю страницу, я должен дважды нажать кнопку, чтобы получить подсказку. После этого каждый раз, когда я нажимаю ту же кнопку и вызываю метод classicHover() (без обновления), я получаю одно приглашение плюс (два приглашения, три подсказки, четыре ...).Почему этот метод называется несколько раз?

Это код:

function classicHover(){ 
    $('#button1').click(function(){ 
     gridSize = prompt("Set Grid Size") 
     $('.container').empty(); 

     for(i = 0; i < gridSize * gridSize; i++) { 
      $('.container').append("<div>a</div>"); 
     }; 
    }); 
}; 

Кнопка:

<input id="button1" type="button" value="Set New Grid" onclick="classicHover()" /> 

Что я делаю неправильно? Я JS/jQuery новичок btw

+1

не имеют прослушивателя событий jquery click внутри функции, это будет вызвано вводом. Имейте одно или другое не то, и другое. – depperm

+0

, когда вы нажимаете на свою кнопку, вы вызываете 'classicHover'. эта функция добавляет слушателя к кнопке '# button1' при каждом вызове. вы в основном не нуждаетесь в этом '$ ('# button1'). click (function() {' line – njzk2

+1

Вы добавляете обработчик событий каждый раз при нажатии кнопки 'button1'. –

ответ

0

Ваши звонки по телефону classicHover. classicHover добавляет функцию к слушателю кнопки. Каждый раз, когда вы нажимаете на нее, вы добавляете что-то к своему слушателю. Таким образом, первый клик добавляет 1. Второй клик запускает 1 и добавляет другой. Третий клик запускает 2 и добавляет другой. Повторите для каждого щелчка.

+0

Что такое решение, .unbind()? – 11223342124

+0

@ 11223342124 Не вызывайте '.click()' внутри обработчика кликов. Просто назовите его один раз в '$ (document) .ready()'. – Barmar

+0

Aaa, глупо мне :) спасибо @Barmar – 11223342124

Смежные вопросы