函数的返回值返回undefined
我有一个HTML表单,如果输入文本的值为www,用户可以输入url。在它中,我将创建一个变量并将其返回给函数,然后将其传递给ajax,但似乎当我在控制台中检查它(ajaxData var)时,它说未定义。函数的返回值返回undefined
<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我将通过数据变量。我希望我的解释很清楚。
目前,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>
哦!我也有防止默认,但我没有在这里包括它,因为它不能在我的工作之前,感谢正则表达式! – camdev
这里有一些问题。
调用$('#defaultForm').submit(function() {
将提交处理程序绑定到表单。它不提交表单也不执行函数。请熟悉with the documentation。
您的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();
});
感谢您的提示,但我可以问,在if语句中声明变量是否是一种不好的做法? – camdev
在你的代码中,myreturnValue()只返回函数的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)
});
看来你正在呼吁该行的函数(VAR ... = ajaxData myreturnValue(); ...),它调用父功能,但该功能内变量正在等待表单提交 - 所以变量还不存在。应该重新调用函数调用和操作顺序。 – gavgrif
感谢提示@gavgrif我会尝试调整它。它也是有意义的! – camdev