2010-05-03 18 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

相關問題