2014-11-29 5 views
0

Я делаю видеоигр с javascript. Однако есть только одна вещь, которую я не понимаю.Оператор if и .click

if (!user.hasOwnProperty('firstName')) { 
    $('#inputSubmit').click(function() { 
     user.firstName = getInput(); 
     addText_1("Good, now type your character's last name"); 
    }); 
}; 

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

$('#inputSubmit').click(function() { 
    if(!user.hasOwnProperty('firstName')) { 
     user.firstName = getInput(); 
     addText_1('hello'); 
    }; 
}); 

Однако это работает. Он делает это только один раз. Может ли кто-нибудь объяснить принцип, что я не понимаю?

спасибо!

+0

Где вы запустите код в первом образце? Возможно ли, что обработчик отправки добавляется один раз и не удаляется после того, как пользователь нажимает кнопку «Отправить»? – tsnorri

ответ

2

Вы присоединяете событие click к #inputSubmit. Этот обратный вызов игнорирует окружающий оператор if. В вашем втором примере кода, если он находится внутри функции обратного вызова.

+0

Думаю, это имеет смысл. Я отвечу на ваш ответ через 10 минут. Спасибо! –

+0

Кроме того, в качестве общего принципа проектирования вы лучше всего назначаете свои обработчики, а затем проверяете логику внутри них, что делает ваш второй формат. Если вы * никогда не будете обрабатывать клики, если какое-то определенное общее или глобальное условие в приложении или по всему сайту не является истинным, тогда штраф, но в этом случае вы говорите: «Если пользователь ничего не заполнил, не делайте то есть лучше внутри. – deitch

0

в первом коде «hasOwnProperty» проверяется в рамках внешней функции(), но во втором коде условие проверяется в рамках функции