关于javascript:为什么点击后返回功能不同 | 珊瑚贝

Why is return function different after click


在下面的代码 $(‘body’).delegate(‘.submit’,… passed = search && passed; … 中单击表单中的按钮后,我在 var passed 中输出为 true,以防函数搜索中的 var result 是 false,因为数据是 \\’0\\’。怎么解决?

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;
       }
   });

  • 请澄清你的问题。目前还不清楚你在问什么。另外,变量 search 在哪里声明或设置?
  • 在这里 passed = search && passed; 搜索是相同的功能搜索。
  • 这就解释了。您必须使用 search(e) 实际调用搜索函数,而不仅仅是搜索。
  • @jfriend00 也不起作用。看我的回答和评论。我发布了一个 jsFiddle 演示。


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;
       }
   });
  • 我改变但不工作,仍然输出 alert(passed); 是真的,!?
  • if (data == 0) { 应该是 if (data ==”0″) {


尝试更改此行:

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;
    }
});

设置一个全局变量 searchResult 并在 search() 函数中修改它意味着你不必从它返回任何东西。您现在可以在提交按钮的单击事件中检查 searchResult。您将 search() 函数作为回调附加到 .myclass_1 的 click 事件和 .myclass_2 的 keyup 和 change 事件,所以现在 search() 函数将触发并根据ajax 响应。

  • 是的,那是因为在 search() 中,您试图从事件过程中返回一个布尔值。如果您在 e.preventDefault(); 之后添加 return false;,那么当调用 alert() 时您将看到”false”。
  • 好的,我改变了,但是如果函数搜索中的输出为真,这里 passed = search() && passed; var passed 的警报总是为假,我该怎么办?
  • 问题是您的代码逻辑根本上是错误的。我会尽量让它按照我认为你想要的方式工作。
  • 这个问题怎么办?我等了吗?


这里有几个问题。

首先,您的方法 search 在 keyup/etc. 上设置了一个额外的 .live 处理程序,我不明白。如果您的目标是在这些事件上运行 search,请不要再次绑定 search 中的事件。

二、委托函数中的search变量是什么?这应该代表 search() 函数的返回值,还是别的什么?如果它应该是 search() 的返回值,那么它不是——为了让它成为你应该设置一个全局(或命名空间的全局),如上一个问题中所讨论的那样。

我建议在深入学习之前先阅读一些 JavaScript 和 jQuery 教程;从长远来看,它将节省一些时间。在问题上投入大量代码而不了解其工作原理/方式最终会适得其反。


来源:https://www.codenong.com/8282009/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9801.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?