Javascript 无法使用jquery从另一个页面计数复选框

Javascript 无法使用jquery从另一个页面计数复选框,javascript,php,jquery,checkbox,Javascript,Php,Jquery,Checkbox,我有多套复选框。我想计算一组特定的复选框。这些复选框具有类sub。有趣的是,它们是通过ajax调用从另一个php页面获取的。所以柜台坏了 <script> $("[id^=sub][type=checkbox]").change(function () { $('#count').text($("[id^=sub][type=checkbox]").length); }); </script> 这是获取的复选框的结构: <input type="check

我有多套复选框。我想计算一组特定的复选框。这些复选框具有类
sub
。有趣的是,它们是通过ajax调用从另一个php页面获取的。所以柜台坏了

<script>
$("[id^=sub][type=checkbox]").change(function () {
    $('#count').text($("[id^=sub][type=checkbox]").length);
});
</script>
这是获取的复选框的结构:

<input type="checkbox" class="sub" name="sub['.$subjects_id.']" id="sub" value="">

我在html页面中显示计数,如下所示:

<p id="count"></p>


将更改事件处理程序绑定到子复选框时,它们不存在,因此jQuery对象不表示任何元素。也就是说,
$(“[id^=sub][type=checkbox]”
在调用它时与任何元素都不匹配

您有两种选择,在ajax调用创建复选框后绑定事件处理程序,或者使用事件委派。通过事件委派,可以将处理程序绑定到祖先元素,但指定仅当与选择器匹配的元素发生更改时才调用它。有关事件委派的更多信息,请参见jQuery函数文档

它可以简单到:

$(document).on('change', '[id^=sub][type=checkbox]', function () {
    $('#count').text($('[id^=sub][type=checkbox]:checked').length);
});
但是为了提高效率,您应该尝试使用比
文档
元素更接近的祖先。越接近越好,但它必须是所有子复选框的祖先,并且在执行此代码时它必须存在

根据为子复选框显示的html,还可以使用以下选择器:

$(document).on('change', ':checkbox.sub', function () {
    $('#count').text($(':checkbox.sub:checked').length);
});

“那么计数器不工作了”这是什么意思?是不是
0
?是否
未定义
?它是否为空?是不是应该是
41
?它是否抛出
类型错误
?它完全不起作用吗?请详细解释。另外,我在代码中没有看到任何AJAX调用。@Xufox这意味着它没有显示任何计数!那么,您可以在控制台输出中看到这是一个错误吗?在这里,事件委派是一个非常优雅的解决方案。在只有一个事件侦听器的情况下,不需要数百个事件侦听器。@John S,我尝试了您的精确代码,但仍然没有显示计数。我试着用$('td')来代替您要求选择最近祖先的文档,但仍然没有显示计数@甜心-先试试
文档
。@JohnS,我还是这么做了not@sweety-我只能想象您的选择器与复选框不匹配。您可以发布问题中复选框的实际html。您也可以尝试以下选择器:
:checkbox.sub
$(document).on('change', ':checkbox.sub', function () {
    $('#count').text($(':checkbox.sub:checked').length);
});