[英]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)
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.