Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当值大于时,为什么不执行jQuery函数?_Javascript_Jquery - Fatal编程技术网

Javascript 当值大于时,为什么不执行jQuery函数?

Javascript 当值大于时,为什么不执行jQuery函数?,javascript,jquery,Javascript,Jquery,我有一个表,其行定义如下: <tr> <td id="to-watch"> @Model.Results.Seats </td> </tr> $(document).ready(function () { (function loop(i) { setTimeout(function () { callAjax(i); //console.log("wo

我有一个表,其行定义如下:

<tr>
  <td id="to-watch">
      @Model.Results.Seats
  </td>
</tr>
$(document).ready(function () {

    (function loop(i) {
        setTimeout(function () {
            callAjax(i);
            //console.log("works " + i);
        },
            500); // ms
        function callAjax(i) {
            $.ajax({
                url: '/Home/StartElection',
                type: 'POST',
                data: "test",
                async: true
            })
                .done(function (partialViewResult) {
                    $("#partialTable").html(partialViewResult);
                }).always(function () {
                    if (--i) loop(i);
                });
        };
    })(650);
});
我已经在Chrome调试工具中进行了检查,当值大于2时,没有任何东西被记录到控制台中-我很少使用jQuery/JavaScript,并且在查看了一些之后,还没有找到答案

编辑:我正在这样做ajax调用:

<tr>
  <td id="to-watch">
      @Model.Results.Seats
  </td>
</tr>
$(document).ready(function () {

    (function loop(i) {
        setTimeout(function () {
            callAjax(i);
            //console.log("works " + i);
        },
            500); // ms
        function callAjax(i) {
            $.ajax({
                url: '/Home/StartElection',
                type: 'POST',
                data: "test",
                async: true
            })
                .done(function (partialViewResult) {
                    $("#partialTable").html(partialViewResult);
                }).always(function () {
                    if (--i) loop(i);
                });
        };
    })(650);
});

请尝试JQuery函数中的文本,而不是val

请尝试JQuery函数中的文本,而不是val

请尝试文本

请尝试文本

这只是对这个问题的一个直接回答,你可能有更好的方法来解决这个问题:正如@jeremy所指出的,考虑到你的连续投票,这是一种过分的做法


这只是对这个问题的一个直接回答,你可能有更好的方法来解决这个问题:正如@jeremy所指出的,考虑到你的连续投票,这是一种过分的做法。

这里有几个问题

首先,更改事件用于输入字段。只要输入字段的值发生变化,它就会执行回调

当任何html发生更改时,都有一个等价物,使用,但是对于这个场景来说太复杂了,因为您知道html发生更改时,它是通过您的代码完成的

其次,您正在将一个事件侦听器附加到要监视的对象,我假设它嵌套在partialTable中。现在我们已经知道更改事件无论如何都不会工作,但即使这是一个输入字段,我们也会遇到以下问题:

将侦听器附加到要监视的DOM元素 打ajax电话 在返回ajax调用时,用新版本的partialTable替换所有partialTable。 旧的towatch元素现在已经不存在了,它的事件侦听器也不存在了。它不能再被触发了。 解决这个问题的办法叫做。这意味着您将侦听器附加到一个未更改的父元素,并检查是否有与选择器匹配的子元素已更改。这意味着子元素的id已动态更改,侦听器仍将工作

此外,还有上述内容:

$'…'。text将提供任何DOM元素的内容,其中作为$'…'。val将提供输入字段的值

您希望进行数值比较X>Y,因此应该使用parseIntx将字符串2(即$'to-watch'的文本)转换为整数

你问题的解决办法 更新partialTable时,您知道to watch元素已收到一个新值,因此现在是检查它的时候了:

      function callAjax(i) {
        $.ajax({
            url: '/Home/StartElection',
            type: 'POST',
            data: "test",
            async: true
        }).done(function (partialViewResult) {
            $("#partialTable").html(partialViewResult);
            if (parseInt($('#to-watch').text()) > 2) {
              console.log("************ WINNER ***************");
            }
        }).always(function () {
            if (--i) loop(i);
        });
    };

这里有几个问题

首先,更改事件用于输入字段。只要输入字段的值发生变化,它就会执行回调

当任何html发生更改时,都有一个等价物,使用,但是对于这个场景来说太复杂了,因为您知道html发生更改时,它是通过您的代码完成的

其次,您正在将一个事件侦听器附加到要监视的对象,我假设它嵌套在partialTable中。现在我们已经知道更改事件无论如何都不会工作,但即使这是一个输入字段,我们也会遇到以下问题:

将侦听器附加到要监视的DOM元素 打ajax电话 在返回ajax调用时,用新版本的partialTable替换所有partialTable。 旧的towatch元素现在已经不存在了,它的事件侦听器也不存在了。它不能再被触发了。 解决这个问题的办法叫做。这意味着您将侦听器附加到一个未更改的父元素,并检查是否有与选择器匹配的子元素已更改。这意味着子元素的id已动态更改,侦听器仍将工作

此外,还有上述内容:

$'…'。text将提供任何DOM元素的内容,其中作为$'…'。val将提供输入字段的值

您希望进行数值比较X>Y,因此应该使用parseIntx将字符串2(即$'to-watch'的文本)转换为整数

你问题的解决办法 更新partialTable时,您知道to watch元素已收到一个新值,因此现在是检查它的时候了:

      function callAjax(i) {
        $.ajax({
            url: '/Home/StartElection',
            type: 'POST',
            data: "test",
            async: true
        }).done(function (partialViewResult) {
            $("#partialTable").html(partialViewResult);
            if (parseInt($('#to-watch').text()) > 2) {
              console.log("************ WINNER ***************");
            }
        }).always(function () {
            if (--i) loop(i);
        });
    };

除非您自己触发某个元素,否则您永远不会得到该元素的更改事件。元素内容如何/为什么发生更改?要查看的是表列。我们通常用于表单字段。此外,事件没有值,因此.val不起作用。您可能需要$'to-watch'。text元素正在通过ajax调用更改为一个操作,该操作将数据返回到定义表的部分-将更新我的原始POST如果值在ajax调用后更改,为什么要向DOM添加更改事件侦听器??为什么不直接从ajax调用本身触发函数呢?除非您自己触发,否则您永远不会得到元素上的更改事件。元素内容如何/为什么发生更改?要查看的是表列。我们通常用于表单字段。此外,事件没有值,因此.val不起作用。你可能想要$to-watch.text这个ele
通过ajax调用一个将数据返回到定义了表的部分的操作来更改参数-将更新我的原始位置如果在ajax调用后更改了值,为什么要向DOM添加更改事件侦听器??为什么不直接从ajax调用本身触发函数呢?不知道为什么会被否决?这似乎是正确的solution@Ash因为虽然文本是正确方向上的一个步骤,但是您正在将字符串与2中的整数进行比较。它总是会返回false。不知道为什么会被否决?这似乎是正确的solution@Ash因为虽然文本是正确方向上的一个步骤,但是您正在将字符串与2中的整数进行比较。它将始终返回false。当元素的值已更改时发生更改事件,仅对和元素起作用。当元素的值已更改时发生更改事件,仅对和元素起作用。这不起作用。您正在用全新的内容重写整个表,然后在刚刚添加到dom中的内容上触发一个更改事件。我建议使用on进行事件委派,现在进行更新:感谢您指出这无法工作。您正在用全新的内容重写整个表,然后您正在对刚刚添加到dom中的内容触发一个更改事件。我建议使用on来更新事件委派:谢谢您指出这一点谢谢!!为什么确实要更新视图,然后在视图发生更改时触发函数?这绝对是过火了。只需在ajax调用中触发所需内容+1谢谢你!!为什么确实要更新视图,然后在视图发生更改时触发函数?这绝对是过火了。只需在ajax调用中触发所需内容+1.
      function callAjax(i) {
        $.ajax({
            url: '/Home/StartElection',
            type: 'POST',
            data: "test",
            async: true
        }).done(function (partialViewResult) {
            $("#partialTable").html(partialViewResult);
            if (parseInt($('#to-watch').text()) > 2) {
              console.log("************ WINNER ***************");
            }
        }).always(function () {
            if (--i) loop(i);
        });
    };