函数的返回值返回undefined

时间:2017-01-03 03:02:45

标签: javascript jquery ajax

我有一个html,其中有一个表单,如果输入文本的值有www,用户可以输入url。在其中我将创建一个变量并将其返回到函数然后将其传递给ajax但似乎当我在控制台中检查它(ajaxData var)时它表示未定义。

<form action="" id="defaultForm">
  <input type="text" id="url">
  <button id="submit">Submit</button>
</form>

JS:

$(function () {
   function myreturnValue() {
      $('#defaultForm').submit(function () {

         var w = 'www.';
         var current = $('#url').val();
         var appendW = w + current;

         if (current.match('www.')) {
            console.log('it already consists of www');
            var returnValue = 'site_url:' + current; //site_url:www.domain.com or http://
            console.log(typeof returnValue);
            return returnValue;
         } else {
            var returnValue = 'site_url:' + appendW; //www+url
            console.log(current);
            console.log(appendW);
            console.log(returnValue);
            return returnValue;
         }
      }); //end submit
   }
   var ajaxData = myreturnValue();
   console.log(typeof ajaxData);
   var data = 'data:{' + ajaxData + '}';
});

然后在ajax中我将传递数据变量。我希望我的解释有点清楚。

3 个答案:

答案 0 :(得分:0)

这里有一些问题。

调用$('#defaultForm').submit(function () {将提交处理程序绑定到表单。它不提交表单也不执行该功能。请熟悉自己with the documentation

您的myreturnValue()没有返回任何内容。您只有一个顶级行,即上面的提交绑定。它不仅没有被执行,而且该函数中的return不会像你期望的那样传播。在事件处理程序内返回不会在任何上下文中执行任何操作。

一般不要在vars个分支机构内声明if

此处快速尝试重新组织此代码,但由于存在许多问题,更正的代码可能取决于您的具体需求。

(function () {
    $('#defaultForm').submit(function (event) {

        // prevent default form submit
        event.preventDefault();

        var w = 'www.';
        var current = $('#url').val();
        var appendW = w + current;
        var value;

        if (current.match('www.')) {
            console.log('it already consists of www');
            value = 'site_url:' + current; //site_url:www.domain.com or http://
            console.log(typeof returnValue);
        } else {
            value = 'site_url:' + appendW; //www+url
            console.log(current);
            console.log(appendW);
            console.log(returnValue);
        }

        var data = 'data:{' + ajaxData + '}';

        // Do whatever you want with data here

    });

    // If you want to now submit the form by hand...
    $('#defaultForm').submit();

});

答案 1 :(得分:0)

目前在您的代码中,myreturnValue函数只执行代码来向表单注册事件监听器,而不返回值(您的return语句只会在submit事件上触发),这就是为什么它将在第一时间返回undefined。

试试这个:

  • 将您的网址检测逻辑放入myreturnValue功能
  • 然后输入代码以防止触发默认提交事件
  • 最后为提交按钮注册一个事件监听器。

你的原始正则表达式www.表示将www与另一个角色匹配,例如wwww。和www0。将是有效的。您可以考虑将其更改为其他正则表达式,例如this one

$(function() {
  function myreturnValue() {
    var w = 'www.';
    var current = $('#url').val();
    var appendW = w + current;
    if (current.match(w)) {
      console.log('it already consists of www');
      var returnValue = 'site_url:' + current; //site_url:www.domain.com or http://
      console.log(typeof returnValue);
      return returnValue;
    } else {
      var returnValue = 'site_url:' + appendW; //www+url
      console.log(current);
      console.log(appendW);
      console.log(returnValue);
      return returnValue;
    }
  }
  $('#defaultForm').submit(function(e) {
    e.preventDefault();
  });
  $('#submit').on('click', function() {
    var data = 'data:{' + myreturnValue() + '}';
    console.log(data);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="" id="defaultForm">
  <input type="text" id="url">
  <button id="submit">Submit</button>
</form>

答案 2 :(得分:0)

在您的代码中,myreturnValue()仅返回Submit中函数的returnValue。 &#39; myreturnValue&#39;函数返回任何东西,因为它没有任何返回值。

您执行了不必要的函数来获取ajaxData。 要获取ajaxData,您只需要

$('#defaultForm').submit(function () {
    contents
}

如果修复代码简单......

$('#defaultForm').submit(function () {
  var returnValue;
  var w = 'www.';
  var current = $('#url').val();
  var appendW = w + current;

  if (current.match('www.')) {
    console.log('it already consists of www');
    returnValue = 'site_url:' + current;   //site_url:www.domain.com or http://
    console.log(typeof returnValue);
  } else {
    returnValue = 'site_url:' + appendW; //www+url
    console.log(current);
    console.log(appendW);
    console.log(returnValue);
  }
  console.log(typeof returnValue);
  var data = 'data:{' + ajaxData + '}';
  console.log('data : ', data)
});

请注意:http://codepen.io/onyoon7/pen/mRdJJV