2010-04-26 2 views
1

PHP, jQuery 및 Spry의 조합을 사용하여 사용자가 먼저 차량 유형을 선택한 다음 make, 모델 및 마지막으로 일련의 목록 상자를 제공합니다. 특정 모델.즉석에서 요소를 활성화/생성하는 방법

내 모든 listboxes (SELECT)가 정상적으로 작동하며 Spry 요소를 사용하여 올바르게 업데이트됩니다. 각 목록 상자는 다른 Spry XML 데이터 집합에서 채워지며 이것이 내 문제입니다.

사용자에게 네 개의 목록 상자를 모두 제공하면 스크립트는 몇 초가 걸리는 네 개의 목록 상자를 모두 채우기 위해 네 개의 XML 로트를 모두 가져와야합니다. 내가하고 싶은 일은 목록 상자를 순서대로 생성/활성화하는 것입니다. 따라서 사용자가 첫 번째 목록 상자에서 선택하면 두 번째 항목이 만들어지고 두 번째 항목이 선택되고 두 번째 항목이 선택되면 세 번째 항목이 작성/활성화됩니다. 에.

스크립트가 처리되기 전에 이미 스크립트를 가져 왔기 때문에 disabled 특성을 설정하는 것은 좋지 않습니다.

어떤 아이디어 ??

UPDATE - 미안 얘들 아, 내 문제는 아주 분명하게 생각하지 않습니다.

필자는 필자가 Spry XML 데이터 세트 변수 4 개를 선언했다. 각 변수는 필요에 따라 서비스가 중단되고 서비스에 대한 복잡한 SOAP 쿼리를 수행 한 다음 XML 청크를 반환한다. 각 쿼리는 마지막 쿼리에 따라 달라 지므로 사용자가 차량 유형을 선택하면 두 번째 데이터 세트가 새로 고쳐져 정확한 제조업체 목록이 제공됩니다. 제조업체를 선택하면 세 번째 목록이 새로 고쳐져 해당 제조업체의 정확한 모델 목록이 제공됩니다. 모델을 선택하면 모델 파생어 목록이 해당 모델에 대해 새로 고쳐집니다 (네 번째 목록).

내 스크립트가 다운 된 경우 4 개의 SELECT가 있으며 각각은 spry 쿼리의 데이터로 채워집니다. 이제 사용자는 최종 상자에서 올바른 모델을 얻으려면 각 목록에서 원하는 옵션을 차례로 선택해야합니다. 내가하고 싶은 일은 페이지가 생성 될 때 첫 번째 상자 만 채운 다음 사용자가 Autotrader 웹 사이트에서 발생하는 것과 같이 각각에서 원하는 값을 선택할 때 두 번째, 세 번째 및 네 번째 상자를 채 웁니다. www.autotrader.co.uk).

초기 게시물에서 말했듯이 'disabled'attr 또는 jQuery show() 및 hide() 함수도 사용할 수 없습니다. 네 개의 데이터 세트가 모두 가져온 후에야 시작됩니다. SELECT에 채워집니다. 나는 왜 단지 숨길

희망이 그들을 해제하는 대신

+0

귀하의 태그는 "php, jquery, spry"이어야합니다. 귀하가 선택한 것들은 너무 일반적이며 php/jquery 사람들은 들어 와서 귀찮게하지 않을 것입니다. –

+0

태그가 업데이트되었습니다. 포인터 주셔서 감사합니다, StackOverflow에 첫 번째 게시물. –

답변

0
$('option').click(function() { 
    if($(this).val() != 'Select one...'){ 
     $(this).next('select').attr('enabled', 'enabled'); 
     $(this).next('select ~ select').attr('disabled', 'disabled'); 

     /* or */ 
     $(this).after('<!-- Generated select/option HTML -->').nextAll('select').remove(); 
    } 
} 

이 완전히 안된이지만, API에 따라 작동 할 수 있습니다. 나는 당신의 질문을 완전히 이해하고 있는지 확신 할 수 없지만 선택 후 다음 옵션을 사용하도록 설정하고 다음 옵션을 클릭 할 때까지 옵션을 사용하지 않으려는 경우, 이것이 작동하면 티켓이됩니다.

동적으로 추가 (또는 제거)하는 문제 인 경우 .after.nextAll 메서드를 사용하여 제거 할 선택 상자를 추가하고 정확하게 지정할 수 있습니다.

업데이트 : Whoopsie. 잘못된 셀렉터가 있었어.

+0

나는 당신이 여기서 생각하고있는 것을보고 있지만, 나는 이것이 이전의 대답과 같은 이유로 작용하지 않을 것이라고 생각한다. 위의 메인 게시에 대한 편집을 참조하십시오 ... –

+0

Spry 요청에 대한 '관찰자'설정에 대한 설명서뿐만 아니라 올바른 방향으로 나를 안내해주었습니다. 지금 바로 정렬 할 수 있다고 생각합니다. 많은 감사합니다 모두 –

0

를 명확히 ... 이상적으로 처음 필요할 때, 처음에 반입되고 XML의 네 많이 중지에서 요소를 만들어 뭔가가 필요/jQuery를 사용하여 표시 하시겠습니까? .hide().show(),

+0

같은 문제로 인해. jQuery 이벤트가 트리거 될 때까지 XML은 이미 서버에서 가져온 것이다. 처음에 스크립트에서 요소를 효과적으로 제거한 다음 필요할 때 추가해야합니다. –

0

나는 당신이 요구하는지 무엇인지 모르겠어요하지만 당신은 같은 뭔가를 찾고있는 것처럼 보인다 :

$("#select1").bind("change",function() { 
    var sel=$(this).attr("value"); 
    $.ajax({ 
     url:sel + ".xml", 
     dataType:"xml", 
     success:function(xml) { 
      $(xml).children("option").each(function() { 
       $("<option />",attr:{ value:$(this).attr("value") }).text($(this).text()).appendTo("#select2"); 
      }); 
     } 
    }); 
}); 

내가 여기 방법 기지에서 있습니까? 제 말은, 이것은 단지 그것에 관한 초보적인 방법 일뿐입니다 (그리고 아마 10 억 개의 구멍이 있습니다). 페이지로드시 모든 XML을 가져 오는 것을 원하지 않습니까? $("#select1")$("#formname select").each(function() {으로 변경 한 다음 XML을 가져온 후 .next("select")을 추가하도록 선택할 수도 있습니다.

나는 고백 하겠지만, 나는 Spry를 사용한 적이 없다. 조금 익숙해졌으며 jQuery를 사용하기 위해 필요한 것을 할 수있는 것처럼 보였습니다.

+0

설명에 대해 : jQuery의 $ .ajax 함수를 살펴 보았습니까? 그것은 코드 일관성을 유지하고 Spry의 필요성을 없애기 위해 필요한 것이 무엇인지 알 것입니다. 난 당신이 아마 각각의 복잡한 XML 요청, 어쩌면 하나의 매개 변수와 함수를 만들 것이라고 가정하고 각 양식이 변경되었을 때 그 기능을 호출합니다. 문서가로드 될 때 함수를 호출하지 마십시오. 사용자가 수행하는 것처럼 들립니다. 그냥 함수를 만들고 물건이 바뀌면 $ (element) .bind ("change", function() {...})를 사용하여 호출하십시오. http://api.jquery.com/jQuery.ajax/ –

+0

예, 보았습니다. 솔직하게 말해서 Spry를 사용하기 때문에 이전에 사용했기 때문에이 프로젝트는 꽤 어렵습니다. 100 % jQuery를 사용하여 다시 코딩하고 싶은만큼 지금은 실행 가능하지 않습니다. 어쩌면이 버전을 가지고 나면 다음 버전에서 jQuery를 사용할 수 있습니다. –

+0

좋아요, 원칙은 똑같습니다. XML 호출을 함수에 넣고 양식이 변경되면 jQuery 나 Spry 또는 plain ol 'Javascript를 사용하여 호출 할 수 있어야합니다. 그러면 필요한 부분 만 호출 할 수 있습니다. ~, 필요할 때. –