2012-04-16 128 views
2

我<選擇>輸入,這是代碼爲它change事件:jQuery的.change()不工作

$(document).on("change", "select[id $= 'Type']", function(){ 
    var id = $(this).attr('id'); 
    id = id.replace("Question", ""); 
    id = id.replace("Type", ""); 
    id = id.replace("Option", "###"); 
    var split = id.split("###"); 
    var qno = split[0]; 
    var ono = split[1]; 
    setOptionContentInput($(this).val(), qno, ono); 
}); 

這完美的作品。

但是,當我在$(document).ready()函數內調用下面的代碼時,它不起作用,我不知道爲什麼。

$(document).ready(function() { 
    $("select[id $= 'Type']").change(); 
}); 

這裏是setOptionContentInput()功能:

function setOptionContentInput(type, qno, ono){ 
    switch(type) { 
    case "<?php echo TEXT_OPTION; ?>": 
     $(".image_option_" + qno + "_" + ono).attr('disabled', 'disabled'); 
     $(".image_option_" + qno + "_" + ono).hide(); 
     $(".sound_option_" + qno + "_" + ono).attr('disabled', 'disabled'); 
     $(".sound_option_" + qno + "_" + ono).hide(); 
     $(".text_option_" + qno + "_" + ono).removeAttr('disabled'); 
     $(".text_option_" + qno + "_" + ono).show(500); 
     $(".text_option_" + qno + "_" + ono).siblings("label").show(500); 
     break; 

    case "<?php echo IMAGE_OPTION; ?>": 
     $(".text_option_" + qno + "_" + ono).attr('disabled', 'disabled'); 
     $(".text_option_" + qno + "_" + ono).hide(); 
     $(".text_option_" + qno + "_" + ono).siblings("label").hide(); 
     $(".sound_option_" + qno + "_" + ono).attr('disabled', 'disabled'); 
     $(".sound_option_" + qno + "_" + ono).hide(); 
     $(".image_option_" + qno + "_" + ono).removeAttr('disabled'); 
     $(".image_option_" + qno + "_" + ono).show(500); 
     break; 

    case "<?php echo SOUND_OPTION; ?>": 
     $(".text_option_" + qno + "_" + ono).attr('disabled', 'disabled'); 
     $(".text_option_" + qno + "_" + ono).hide(); 
     $(".text_option_" + qno + "_" + ono).siblings("label").hide(); 
     $(".image_option_" + qno + "_" + ono).attr('disabled', 'disabled'); 
     $(".image_option_" + qno + "_" + ono).hide(); 
     $(".sound_option_" + qno + "_" + ono).removeAttr('disabled'); 
     $(".sound_option_" + qno + "_" + ono).show(500); 
     break; 

    default: 
    } 
} 

任何人可以幫助?謝謝。

+0

請問事件處理程序至少被調用?在你調用'.change()'之前,你是否綁定了事件處理函數?也請說明「不正常」的含義。做一些調試,測試事件處理程序是否被調用,如果是,那麼select元素具有哪個值,等等...... – 2012-04-16 11:45:47

+0

你好,我現在已經修復了它。我放置了$(「select [id $ ='Type']」)。到$(window).load(function(){}現在它工作。我使用CakePHP和.image_option_,.sound_option_和text_option_ divs在另一個文件中(在CakePHP元素中)。所以問題可能是,$ (document).ready(function(){})不會等待來自其他文件的這些輸入。對不起,我的英語:) – Johny 2012-04-16 11:56:34

+1

這應該不是問題...輸出是作爲一個整體創建的,然後發送到瀏覽器。但也許這些陳述的順序搞砸了。要麼提供你的解決方案作爲答案(一旦你可以),並詳細描述出了什麼問題(你應該確保你找出實際的原因)或刪除你的問題。 – 2012-04-16 11:58:43

回答

1

嘗試調用此如下

$(document).ready(function() { 

    $("select[id $= 'Type']").change(function(){ 
     // call the function you want with necessary parameters 
    }); 

}); 
0

如果$(document).ready();不起作用,但$(window).load();做,你可能有(過...)錯誤以前在你的DOM。

當您使用多個$(document).ready();時,通常會發生這種情況。如果第一個錯誤發生,它可能會阻止所有其他錯誤。這就是爲什麼你仍然可以使用$(window).load();

對於誰也會有這樣的問題,未來的人:檢查您的JS控制檯(通過Webkit的開發工具,或螢火蟲,等等),尋找這樣那樣的錯誤,修復它,然後重試;)