Why is return function different after click
在下面的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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; } }); |
1 | passed = search && passed;// this line is missing something |
它总是返回 true,因为您不是在测试 search 的返回值,而是在测试它是否在那个范围(它所在的范围内)上定义
试试这个
1 2 3 4 5 6 7 8 9 10 11 12 | $('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; } }); |
尝试更改此行:
1 | passed = search && passed; |
收件人:
1 | passed = search() && passed; |
编辑
在仔细考虑了您似乎希望代码执行的操作后,我将其逻辑重写为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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; } }); |
设置一个全局变量
这里有几个问题。
首先,您的方法
二、委托函数中的
我建议在深入学习之前先阅读一些 JavaScript 和 jQuery 教程;从长远来看,它将节省一些时间。在问题上投入大量代码而不了解其工作原理/方式最终会适得其反。