Подтвердить что ты не робот

JavaScript - событие onclick получает вызов автоматически

Я написал класс javascript под названием "MyClass", в котором я определил метод "closeThis"

MyClass = function(){

 this.closeThis = function(){
      document.getElementById("hidePane").style.display = 'none';
 }

}

Теперь, в моем html, я пытаюсь вызвать это следующим образом...

<script type="text/javascript">
     function callThis(){
        var myclassObj = new MyClass();
        document.getElementById("closeButton").onclick = myclassObj.closeThis();
     }
</script>

Вышеуказанный вызов будет вызываться, когда я нажимаю кнопку. Проблема здесь в том, что событие "onclick" поверх "clsoeButtion" автоматически вызывается при загрузке страницы. Что может быть неправильным в этом?

4b9b3361

Ответ 1

Вы вызываете функцию сразу.

Когда вы оставляете круглые скобки в ссылке на функцию, вы в основном говорите:

Оцените функцию closeThis и назначьте результат onclick

когда то, что вы действительно хотите сделать, - назначить ссылку на функцию обработчику кликов:

document.getElementById("closeButton").onclick = myclassObj.closeThis;

Оставьте круглые скобки вместо этого, и вы привяжете функцию closeThis к onclick. Вместо этого это говорит следующее:

Назначьте функцию closeThis обработчику кликов.

Вы по существу назначаете функцию переменной как первоклассный объект или ссылку на функцию.

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

document.getElementById("closeButton").onclick = 
    function() {
        myclassObj.closeThis();
    };

Ответ 2

это должно быть document.getElementById("closeButton").onclick = myclassObj.closeThis; не myclassObj.closeThis();

myclassObj.closeThis() вызовет функцию, затем назначит значение onclick

Ответ 3

Вам нужно удалить () из него, иначе он будет вызван немедленно, потому что так вы вызываете функцию путем суффикса (), поэтому просто удалите эти фигурные скобки:

document.getElementById("closeButton").onclick = myclassObj.closeThis;