2012-04-16 2 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() 함수 내부에서 호출하면 작동하지 않으며 그 이유를 알 수 없습니다.

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: 
    } 
} 

아무도 도와 드릴까요 : 여기

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

setOptionContentInput() 기능입니다? 고마워. $(document).ready(); 작동하지 않는 경우

$(document).ready(function() { 

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

}); 
+0

가 이벤트를합니까 핸들러가 적어도 호출 되었습니까? '.change()'를 호출하기 전에 * 이벤트 핸들러를 바인딩하고 있습니까? 또한 "의미가 없다"는 것을 명기하십시오. 일부 디버깅을하고, 이벤트 처리기가 호출되는지 여부를 테스트하고, 예인 경우 선택 요소가 그 순간에 갖는 값 등을 확인하십시오. –

+0

안녕하세요, 저는 이미 지금 당장이를 수정했습니다. $ ("select [id $ = 'Type']"). 변경(); CakePHP 및 .image_option_, .sound_option_ 및 text_option_ div는 CakePHP 요소의 다른 파일에 있습니다. 문제는 아마 $ (window) .load (function() {})에 있습니다. (문서) .ready (function() {}) 다른 파일에서 이러한 입력을 기다리지 않습니다. 내 영어에 대한 죄송합니다 :) – Johny

+1

그 문제가 안된다 ... 출력은 전체적으로 생성 된 다음 브라우저로 전송됩니다. . 하지만 진술의 순서가 엉망이 됐을 수도 있습니다. 솔루션을 답변으로 제공하고 문제가 무엇인지 자세히 설명하십시오 (실제 이유를 찾아야합니다). 또는 질문을 삭제하십시오. –

답변

1

이 호출하려고하지만, $(window).load();, 당신은 아마 당신의 DOM에 이전에 있었다 (...) 오류가 않습니다.

이는 여러 개의 $(document).ready();을 사용할 때 자주 발생합니다. 첫 번째 오류에서 오류가 발생하면 다른 모든 오류를 차단할 수 있습니다. 그렇기 때문에 여전히 $(window).load();을 사용할 수 있습니다. 이 문제를해야합니다 다음 사람들을 위해

: (웹킷 개발 도구, 또는 방화범, 어떤을 통해) 당신의 JS 콘솔을 확인하고 이런 종류의 오류를 찾아, 수리, 재 시도)

0

을 다음과 같이