【问题标题】:Extracting variable from onchange event handler for use in other functions从 onchange 事件处理程序中提取变量以用于其他函数
【发布时间】:2013-05-31 20:05:24
【问题描述】:

我有一个事件处理程序监听下拉列表中的变化并设置变量的值。我已将变量声明为全局变量,即在任何函数之外,然后在更改时设置值。但是,一旦它发生变化,我需要能够在其他函数中获取变量(而不是在偶数处理程序中)。我如何从事件处理程序中“提取”它?我试图退回它,但没有运气 - 这是代码:

$(document).on('change', 'select#search_subject', function () {
    if ($('#sBar3').show()) {
        $('#sBar3').hide();
    }
    var subject = $('#search_subject>option:selected').text();
    var id = $('#search_subject>option:selected').val();
    ajaxSubject(subject, '#sBar3');
    return subject;
});
console.log(subject);   

日志只显示“空字符串”,我很困惑。如果可能的话,我不想重新调整代码以将所有内容包含在事件处理程序中(那里有很多 Google Map 生成代码,这会让人很痛苦)——如果那样的话,我只需要从事件处理程序中取出主题变量有道理 - 谢谢

【问题讨论】:

  • 您说您在全局范围内声明了变量。然后不要声明同名的局部变量,省略var。当然console.log(subject); 仍将显示undefined,因为在执行语句时事件尚未发生。
  • 感谢您帮助一个菜鸟了解更多 felix - 干杯
  • subject=$("option:selected",this).text();
  • @mplungjan 就此而言,var id = $(this).val();
  • @Mathletics 是的,正如我在回答中发布的那样:)

标签: javascript jquery variables event-handling


【解决方案1】:

通过使用var 关键字,您将创建一个新的局部变量,然后将主题文本分配给该变量。如果您已经在全局范围内定义了subject,那么您的赋值行应该是:

subject = $('#search_subject>option:selected').text();

【讨论】:

    【解决方案2】:

    如果稍后没有创建选择,那么在删除使主题为本地的var 后,这将是更简单的代码

    $("#search_subject").on('change',function () {
      $('#sBar3').toggle();
      subject = $('option:selected',this).text();
      var id = $(this).val(); // not used?
      ajaxSubject(subject, '#sBar3');
      window.console && console.log(subject);   
      return subject;
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多