Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.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,我正在编写一个jQuery插件,遇到了以下奇怪的事情: $.fn.todo = function(options) { var $input = $("#main_body>input"); var $checkbox = $("#item_lists input:checkbox"); 我在这里定义实例,并在这个函数中引用它(仍然在插件名称空间中),应该访问它,不是吗 $("#checkAll input").click(function() {

我正在编写一个jQuery插件,遇到了以下奇怪的事情:

$.fn.todo = function(options)
{
    var $input = $("#main_body>input");
    var $checkbox = $("#item_lists input:checkbox");
我在这里定义实例,并在这个函数中引用它(仍然在插件名称空间中),应该访问它,不是吗

$("#checkAll input").click(function()
    {
        $checkbox.prop("checked",this.checked);
    });
 ...
问题是$checkbox不是空的,但是集合的长度是0。 但是,当我将定义放入单击函数时,如下所示:

$("#checkAll input").click(function()
    {
        var $checkbox = $("#item_lists input:checkbox");
        $checkbox.prop("checked",this.checked);
    });
我在console.log中输入$checkbox.length,它显示有两个元素。 此外,如果我像这样在插件名称空间中定义一个本地函数,$复选框被认为是未定义的

function dealWithCheckbox()
{
        var checked_num = $checkbox.filter(":checked").length;
}  

我想知道问题出在哪里

发生这种情况是因为您正在开始设置变量,而此时还没有项目

然后,您可能会动态添加项,但变量不会自动更新,因为它只是一个数组,引用了执行函数时找到的元素


每次您都需要再次使用选择器,以获取所做的所有DOM更改。

我猜插件在html呈现之前已经初始化,这就是为什么它在单击时工作,到那时html已经被评估

您是否将pluin包装在jquery文档中

$(function(){
  ... my plugin code ...
})

你说得对!但是每次我都必须手动更新它,就像定义一个新变量并使用选择器一样?还有其他解决方案吗?如果需要,可以使用相同的变量,但每次都需要更新,没有解决方法。你可以阅读,但这对类似的东西来说太多了。@lizlalala顺便说一句,如果我的答案对你有用,请点击箭头向上投票,如果可能的话,点击
V
将其标记为已接受的答案。