2012-08-30 61 views
0

功能我這個小功能:觸發DOM負載

$('.chrnumberpickerDiv select').change(function(){ 
    var sel = $(this), 
    value = sel.closest('.chrnumberpickerDiv').find('.chrnumberpickerDivText'); 
    value.text(sel.find(':selected').text()); 
}).one('change'); 

我的問題是,我還需要觸發它的DOM負荷。我試過.trigger('change')而不是.one('change'),但它似乎像循環一樣,永不停止刷新我的頁面。那麼,我可以怎樣做才能觸發DOM上的事件,但不會對其他事件造成任何損害,或者導致函數進入循環?

+0

除非有是我不知道的API的一部分,'.one('change');'什麼都不做(綁定一個未定義的處理程序來改變事件,也許?) – jbabey

+0

我想你錯了。這個函數加載DOM,但我需要它來執行它,所以我可以用選項中的文本填充div,因爲div是空的,直到更改被觸發爲止 – Roland

回答

1

如果我明白你的問題,你需要觸發一種功能,當選擇的變化,以及編程觸發它在頁面加載時填充初始值:

// define the handler 
var changeHandler = function() { 
    var sel = $(this), 
    value = sel.closest('.chrnumberpickerDiv').find('.chrnumberpickerDivText'); 
    value.text(sel.find(':selected').text()); 
}; 

// bind the handler 
$('.chrnumberpickerDiv select').change(changeHandler); 

$(document).ready(function() { 
    // execute the handler on page load 
    // use proxy to change what "this" means in the handler 
    // (jQuery does this for you when you bind a handler through jQuery) 
    $.proxy(changeHandler, $('.chrnumberpickerDiv select')[0])); 
}); 

Documentation for proxy

+0

是的...這可能看起來像我需要的東西.. 。只是在測試時,它實際上不會在頁面加載時做任何事情,只是在觸發更改時:| – Roland

+0

@Roland是否有選擇中最初選擇的值?如果沒有,'sel.find(':selected')。text()'將是空的。 – jbabey

+0

是的,在選擇中默認有一個值。 – Roland

0

試試這個,而不是你的代碼

$(document).ready(function() { 
    $('.chrnumberpickerDiv select').change(function(){ 
     var sel = $(this), 
     value = sel.closest('.chrnumberpickerDiv').find('.chrnumberpickerDivText'); 
     value.text(sel.find(':selected').text()); 
    }).one('change'); 
}); 

你必須要小心,不要把多變化的功能。否則,所有這些都會在更改事件發生時被調用。