簡體   English   中英

函數的返回值返回未定義

[英]Return value from a function returns undefined

我有一個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中,我將傳遞數據變量。 我希望我的解釋很清楚。

這里有幾個問題。

調用$('#defaultForm').submit(function () {將提交處理程序綁定到表單。它不會提交表單也不執行函數。請熟悉文檔

您的myreturnValue()不返回任何內容。 您只有一個頂層行,即上面的提交綁定。 它不僅不會執行,而且在該函數內部的return不會像您期望的那樣向上傳播。 返回事件處理程序內部在任何情況下都不會執行任何操作。

通常不要在if分支內聲明vars

這是重新組織此代碼的快速嘗試,但是由於存在許多問題,更正后的代碼可能取決於您的特定需求。

(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();

});

目前在你的代碼, myreturnValue函數只執行代碼以注冊事件偵聽器的形式,沒有返回值(您return語句只會在觸發submit事件),所以這就是為什么它會在第一時間返回undefined。

嘗試這個:

  • 將網址檢測邏輯放入myreturnValue函數中
  • 然后放入代碼以防止觸發默認的提交事件
  • 最后注冊一個事件監聽器以提交按鈕。

和您原始的正則表達式www. 表示將www與其他字符匹配,例如wwww。 和www0。 將有效。 您可以考慮將其更改為其他正則表達式像這樣一個

 $(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> 

在您的代碼中,myreturnValue()僅返回Submit中函數的returnValue。 'myreturnValue'函數返回任何內容,因為它沒有任何返回值。

您執行了不必要的功能來獲取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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM