我有一个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中我将传递数据变量。我希望我的解释有点清楚。
答案 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)
});