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