0

我用 intection 制作了这个函数来获取我试图返回的“select_sport”的值,但我不知道如何获取该值以在另一个脚本中使用它。

这是我的功能

 var selectSport_form = {
    urlSelect : CI_ROOT + 'search_sport',
    run : function() {
        selectSport_form.select_sport();
    },

    select_sport : function() {
        $(document).on('click', '#horiz_container img', function () {
                var img_selected = $(this), $li = img_selected.closest('li');
                var value_sport = $(this).attr('id');
                var $selected = $('#horiz_container .selected').removeClass('selected');
                $selected.find('.selected_sport').remove();

                $li.addClass('selected');
                $li.prepend('<div class="selected_sport"><img src="' + CI_ROOT + 'resources/img/select.png"></div>');
                return value_sport;
        });
}
};

我试图这样称呼它但不起作用

    $(function(){
      selectSport_form.run();
      if(selectSport_form.select_sport() != "") {
        alert('Work');
      }
    });
4

3 回答 3

2

您不能将事件处理程序的值返回给设置事件处理程序的函数。该函数将在事件发生之前很久就完成运行。

您必须使用回调。这是从 ajax 获取值的更一般的情况(其中有问题的事件处理程序是在收到 HTTP 响应时触发的事件处理程序)。

于 2013-09-12T14:24:42.040 回答
1

根据您真正想要做的事情,您有两种选择:

  1. 您可以从单击处理程序中获取代码并将其放入独立函数中,然后您可以随时调用它来查看它计算的值是什么。

  2. 您可以将点击处理程序中的值存储在适当范围内的变量中,然后您可以稍后从适当范围内的任何其他 javascript 中引用该变量。如果作用域是全局或全局可访问的,那么所有函数都可以访问它。

正如您可能已经发现的那样,从事件处理程序返回一个值对您没有帮助。

这是选项#2的示例:

var selectSport_form = {
    urlSelect : CI_ROOT + 'search_sport',
    run : function() {
        selectSport_form.select_sport();
    },

    select_sport : function() {
        $(document).on('click', '#horiz_container img', function () {
                var img_selected = $(this), $li = img_selected.closest('li');
                var value_sport = $(this).attr('id');
                var $selected = $('#horiz_container .selected').removeClass('selected');
                $selected.find('.selected_sport').remove();

                $li.addClass('selected');
                $li.prepend('<div class="selected_sport"><img src="' + CI_ROOT + 'resources/img/select.png"></div>');
                // save the ID value of this click for future reference
                selectSport_form.lastClickValue = value_sport;
        });
    }
};

然后,在代码的其他地方,您可以检查selectSport_form.lastClickValue.

if (selectSport_form.lastClickValue == "something") {
    // do something
}
于 2013-09-12T14:24:50.700 回答
1

如果您console.log(selectSport_form.select_sport());会看到您select_sport()没有返回任何内容,则它是未定义的。你想让这个功能做什么?它不会返回您在其中定义的点击事件。

于 2013-09-12T14:26:03.637 回答