2010-05-03 40 views
0

我需要触发分配给一个复选框,点击功能,但实际上不改变它的选中状态(其中点击()一样)。jQuery的:我怎样才能触发点击(),而无需编辑元素的状态?

情景:我有几个复选框在被选择时显示一个文本形式。这工作得很好,但我也需要调用$点击()函数(文件)。就绪()

我的代码如下,请注意我不得不改变生成的HTML非常有限。我有一个对象(admin_panels),它将存储每个复选框以及它应该显示的texarea。

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(); 
    } 
} 

感谢

回答

4

如果你想要求一个元素admin_slide功能,你可以这样做:

admin_slide.call(domElement); 

admin_slide函数内的this值将被设置为domElement

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

编辑

另一种方式来做到这一点,使用jQuery方法仅仅是:$(selector).each(admin_slide)。所以你的代码可能是:

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

谢谢,admin_slide.call(domElement)完美地工作。 – 2010-05-03 16:29:52

-1

所以,你正在分配document.ready中的点击功能?除了分配事件处理程序之外,为什么不直接调用admin_slide?

+0

这将是作为注释更好,因为'admin_slide'依赖于'this'被设置到适当的元素,它调用函数直接不完成。 – R0MANARMY 2010-05-03 13:47:47

0

为了防止复选框状态更改,包括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(); 
    } 
} 
+0

这不会使状态每次都改变吗? – R0MANARMY 2010-05-03 22:49:24

相关问题