在以下代码$('body').delegate('.submit',... passed = search && passed; ...
之后,如果函数搜索中的var passed
为true
,则在result
输出中false
输出 function search(e) {
e.preventDefault();
$('input').live('keyup change', function () {
var result = true;
$.ajax({
type: 'POST',
dataType: 'json',
url: 'myUrl',
data: myData,
async: false,
cache: false,
success: function (data) {
//in the here data is 0
if (data == 0) {
alert('data is 0')
result = false;
} else {
alert('data is not 0')
}
}
})
alert(result) // Output this alert is 'false' because data is '0'
return result;
})
}
$('.myclass_1').live('click', search);
$('.myclass_2').live('keyup change', search);
$('body').delegate('.submit', 'submit', function () {
var passed = true;
//passed = required_selectbox() && passed;
//passed = required_rediuses() && passed;
passed = search && passed;
alert(passed); // This output is always 'true' !!!!!!!!!!!!!?
if (!passed) {
$('#loadingDiv, #overlay').hide();
return false;
}
});
因为数据是'0'。怎么解决它?
{{1}}
答案 0 :(得分:0)
这里有一些问题。
首先,您的方法search
在.live
/等上设置了额外的keyup
处理程序,我不明白。如果您的目标是对这些事件运行search
,请不要再次绑定search
中的事件。
其次,委托函数中的search
变量是什么?这应该代表search()
函数的返回值,还是其他的东西?如果它应该是search()
的返回值,那么它不是 - 为了你应该设置全局(或命名空间的全局),如previous question中所述。
我建议在进一步之前点击一些JavaScript和jQuery教程;从长远来看,这将节省一些时间。在没有处理原因/如何运作的问题的情况下投入大量代码最终会适得其反。
答案 1 :(得分:0)
尝试更改此行:
passed = search && passed;
要:
passed = search() && passed;
修改强>
在仔细考虑了似乎之后想要你的代码做什么之后,我重写了它的逻辑:
var searchResult = false;
var search = function(e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: 'myURL',
data: myData,
async: false,
success: function(data) {
if (data == '0') {
searchResult = false;
} else {
searchResult = true;
}
}
});
};
$('.myclass_1').live('click', search);
$('.myclass_2').live('keyup change', search);
$('body').delegate('.submit', 'click', function(e) {
var passed = true;
if (!(searchResult && passed)) { // <-- NOTICE THIS
$('#loadingDiv, #overlay').hide();
return false;
}
});
设置全局变量searchResult
并在search()
函数中修改它意味着您不必从中返回任何内容。您现在可以在提交按钮的点击事件中检查searchResult
。您将search()
函数作为回调添加到 .myclass_1 的点击事件和 .myclass_2 的键盘和更改事件,现在search()
1}}函数将根据ajax响应触发并正确设置searchResult
。
答案 2 :(得分:0)
passed = search && passed;// this line is missing something
它总是返回true,因为你没有测试搜索的返回值,而是它是否在该范围内定义(它在哪个范围内)
试试这个
$('body').delegate('.submit', 'submit', function (event) /* USE the event obj to pass it to search() */
{
var passed = true;
//passed = required_selectbox() && passed;
//passed = required_rediuses() && passed;
passed = search(event) && passed;// CHANGES ARE HERE
alert(passed); // This output is always 'true' !!!!!!!!!!!!!?
if (!passed) {
$('#loadingDiv, #overlay').hide();
return false;
}
});