jquery:如何在不编辑元素状态的情况下触发click()?

jquery:如何在不编辑元素状态的情况下触发click()?,jquery,Jquery,我需要触发一个分配给复选框的click函数,但不改变它的选中状态(click()就是这样做的) 场景:我有一个带有多个复选框的表单,当选中该复选框时会显示一个文本区域。这很好,但我还需要对$(document.ready()调用click()函数 我的代码如下,请注意,我更改生成的html的权限非常有限。我有一个对象(管理面板),它将存储每个复选框及其应该显示的区域 var admin_panels = {"checkbox-id" : "textarea-id"}; $(document).

我需要触发一个分配给复选框的click函数,但不改变它的选中状态(click()就是这样做的)

场景:我有一个带有多个复选框的表单,当选中该复选框时会显示一个文本区域。这很好,但我还需要对$(document.ready()调用click()函数

我的代码如下,请注意,我更改生成的html的权限非常有限。我有一个对象(管理面板),它将存储每个复选框及其应该显示的区域

var admin_panels = {"checkbox-id" : "textarea-id"};

$(document).ready(function(){
for (var elem in admin_panels) {
    $("#" + elem).click(admin_slide);
    // $("#" + elem).click();
}
})
function admin_slide() { 
    if ($(this).is(":checked")) {
        $("#" + admin_panels[this.id] + "-wrapper").slideDown();
  }else{
        $("#" + admin_panels[this.id] + "-wrapper").slideUp();
    }
}

谢谢

如果要调用元素的
管理幻灯片
功能,可以执行以下操作:

admin_slide.call(domElement);
管理幻灯片
功能中的
值将设置为
doElement

在这种情况下,
domeElement
可以是
$('#'+elem)[0]
document.getElementById(elem)

编辑

另一种方法是专门使用jQuery方法:
$(选择器)。因此,您的代码可以是:

for (var elem in admin_panels) {
    $("#" + elem).click(admin_slide)
                 .each(admin_slide);
}

如果要调用某个元素的
admin\u slide
函数,可以执行以下操作:

admin_slide.call(domElement);
管理幻灯片
功能中的
值将设置为
doElement

在这种情况下,
domeElement
可以是
$('#'+elem)[0]
document.getElementById(elem)

编辑

另一种方法是专门使用jQuery方法:
$(选择器)。因此,您的代码可以是:

for (var elem in admin_panels) {
    $("#" + elem).click(admin_slide)
                 .each(admin_slide);
}

那么,您正在文档中分配单击功能。准备好了吗?除了分配事件处理程序外,为什么不直接调用admin_slide?

那么,您正在分配document.ready中的click函数?除了分配事件处理程序外,为什么不直接调用admin_slide?

要防止复选框状态发生更改,请在事件处理程序代码中包含
事件.preventDefault
。interjay的回答如下:

$("#" + elem).click(function(event) {
    event.preventDefault();
    admin_slide.call(this);     
});
这种方法唯一的缺点是,在调用admin_slide()时,复选框的状态会发生更改,但在调用admin_slide()后,复选框的状态会发生更改。通过更改管理幻灯片功能中的内容,您可以很容易地解决这个问题

function admin_slide() { 
    if ($(this).is(":checked")) {
        $("#" + admin_panels[this.id] + "-wrapper").slideUp();
    }else{
        $("#" + admin_panels[this.id] + "-wrapper").slideDown();
    }
}

要防止复选框状态更改,请在事件处理程序代码中包含
event.preventDefault
。interjay的回答如下:

$("#" + elem).click(function(event) {
    event.preventDefault();
    admin_slide.call(this);     
});
这种方法唯一的缺点是,在调用admin_slide()时,复选框的状态会发生更改,但在调用admin_slide()后,复选框的状态会发生更改。通过更改管理幻灯片功能中的内容,您可以很容易地解决这个问题

function admin_slide() { 
    if ($(this).is(":checked")) {
        $("#" + admin_panels[this.id] + "-wrapper").slideUp();
    }else{
        $("#" + admin_panels[this.id] + "-wrapper").slideDown();
    }
}

作为注释会更好,因为
admin\u slide
依赖于将
This
设置为正确的元素,而直接调用函数无法完成。作为注释会更好,因为
admin\u slide
依赖于将
This
设置为正确的元素,直接调用函数无法完成的操作。这不会阻止状态每次更改吗?这不会阻止状态每次更改吗?