функция в качестве параметра для другой функции в JS? - PullRequest
3 голосов
/ 12 ноября 2010

Я пытаюсь сделать что-то вроде функции Javascript в качестве параметра другой функции? . Но, к сожалению, у меня ничего не получилось. Я сделал что-то не так, но я не знаю что. Пожалуйста, помогите мне!

Существует div-элемент и функция. Функция выполняет следующие действия: принимает в качестве параметра другую функцию и выполняет ее по щелчку на элементе div:

Update3: Я пытался заставить код работать с вашими примерами ниже, с моим оригинальным веб-проектом. Но у меня есть некоторые проблемы с некоторыми параметрами. Я надеюсь, что вы можете ответить на этот вопрос так же быстро, как и другие.

UPDATE4: Спасибо Энди Э! и все остальные, кто мне помог! Действительно ценю это!

!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
  <head>


  </head>
  <body>
    <div id='divElement'>Hello World!</div>
    <script type="text/javascript">

        function button(exefunction){
            //Some code that decide which date
            var date = '20101010';
            document.getElementById('divElement').onclick = exefunction(date);
        }
        function testfunction(text){
            document.getElementById('divElement').innerHTML = text;
        }
        button(testfunction);
    </script>
  </body>
</html>

Ответы [ 2 ]

5 голосов
/ 12 ноября 2010

измените testfunction на function, и вы получите анонимную функцию, которая передается в качестве аргумента.Вам также нужно удалить парены из exefunction (с ними функция вызывается вместо назначенной):

    function button(exefunction){
        document.getElementById('divElement').onclick = exefunction;
    }
    button(function(){
        document.getElementById('divElement').innerHTML = 'Changed';
    });

Вот рабочий пример, с которым можно поиграться.

Удалите свои символы!

    button(testfunction);
    // not button(testfunction());

Скобки выполняют функцию вместо передачи ее в качестве аргумента.При выполнении функции вместо нее передается возвращаемое значение.

Вторая рабочая демонстрация.

Для вашего последнего редактирования вам нужно создать еще одну анонимную функцию для работы кода:

        document.getElementById('divElement').onclick = function () {
            exefunction(date);
        }

Третья (окончательная?) Рабочая демонстрация.

2 голосов
/ 12 ноября 2010

Я бы заменил строку

button(testfunction());

по

button(testfunction);

ОБНОВЛЕНО Дело в том, что онклики ожидают, что функции без аргументов вы должны попробовать что-то вроде

 function button(exefunction){
        //Some code that decide which date
        var date = '20101010';
        document.getElementById('divElement').onclick = function() {exefunction(date);}
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...