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