【问题标题】:Value of input in jQuery event returns undefinejQuery 事件中的输入值返回未定义
【发布时间】:2017-02-02 22:37:29
【问题描述】:

我有两个单独的 js 文件。其中之一,称为services,我在其中定义输入字段并使用它运行一些 jQuery。另一个文件调用services 并使用返回的值。

如果我使用函数中的值(在services 中),它会返回正确的值。否则,在我的第二个文件中,它确实返回 undefined 因为看起来,如果我调用该函数,它不会等到.change 事件被触发

Services.js

var service = {

    main: function() {
        console.log(service.input);
    },

    init: function( input ) {
        service.input = input;
    },

    getInputValue: function() {
        $('#' + service.input).change(function() {
            return $('#' + service.input).val();
        });
    }
}; 

OtherJsFile.js

$(function(){
    var inputField;

    service.init('inputId');
    inputField = service.getInputValue();

    //Should print the value of inputId
    //Instead it prints undefined
    console.log(inputField);
});

感谢您的帮助!

【问题讨论】:

  • 你没有从 getInputValue() 返回任何东西,你只是从更改处理程序返回一些东西(除非返回 false,否则它不会做任何事情)。默认情况下,如果没有返回值,JavaScript 会返回 undefined - 这就是 inputField = undefined 的原因。您可能应该将您的功能更改为return $("#" + service.input).val();
  • 感谢您的回答。这对我没有帮助,我需要这个 jQuery 事件
  • 我认为你真的误解了你想要做什么=|

标签: javascript jquery scope


【解决方案1】:

一个问题是您在更改处理程序内部返回的内容仅返回到事件处理程序函数,而不是外部getInputValue。所以getInputValue() 没有返回任何内容...这就是为什么你会看到 undefined。

下一个问题是当您尝试获取该值时该事件尚未发生。

说实话,我不确定你在这里想要完成什么

【讨论】:

  • 我尝试减少冗余,因为我需要.change 事件不止一次。该值将用于一些 ajax 请求
  • 需要更改处理程序来做什么?也许您需要一个回调数组来传递给更改处理程序。然后遍历该数组并调用它们。或者使用一些自定义事件
  • 我的目的是获取用户可以填写的输入字段的最终值。例如:用户在“Hello World”中输入我收到这个值并且可以将它用于我的 ajax 发布请求。无论如何,它不是我唯一的输入字段。我有几个。
  • 但你只需要值。除非该事件需要触发一些 ajax,否则添加更改事件侦听器的逻辑没有意义。
  • 无论如何,谢谢你的回答。我会努力解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 2013-06-02
  • 1970-01-01
  • 2014-10-12
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多