Javascript jQuery插件中的变量
我正在编写一个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() {
$.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
将其标记为已接受的答案。