2012-11-06 2 views
5

jQuery 용 ddSlick 플러그인을 사용하여 만든 onSelected 메서드는 생성 된 드롭 다운에서 옵션을 선택한 경우에만 실행해야합니다.ddslick 메서드 onSelected가 즉시 실행 중임

페이지가로드되는 즉시 다음 코드를 실행하면 onSelected가 실행되는 것 같습니다.

누구나 올바른 방향으로 나를 가리킬 수 있습니까?

$('#flag').ddslick({ 
    imagePosition:"left", 
    background:"none", 
    width:"66px", 
    onSelected: function(data){ 
     var chosenCountry = data.selectedData.value; 
     chosenCountry = chosenCountry.toLowerCase(); 
     if(data.selectedIndex > 0) { 
      if(new_url[1] in oc(['de', 'es','fr','it'])) { 
       console.log("translated pages"); 
      } 
     } else { 
      console.log("English site"); 
     } 
    } 
}); 

jsFiddle

감사

+0

는'document.ready' 처리기에서 위의 코드가 시도 할 수 있습니다 ? – Archer

+0

예, document.ready 핸들러 내부에 있지만 여전히 실행됩니다. JsFiddle을 확인하십시오. 선택 상자를 선택하지 않으면 경고가 울리지 않아야합니다. – ngplayground

+0

나는 그걸 갖고 놀았으므로 설명하는 것 이외의 것을 할 수 없습니다. 가능하다면 개발자와 연락을 취해 (코드에 직접 들어가기를 원하지 않는다면) 물어볼 것입니다. "처음"형식의 플래그를 제안했지만, 모든 브라우저에서 발생하지 않거나 또는 (또는 다른 개발자가) 동일한 작업을 수행하지 않는 다른 버전으로 업데이트하는 경우 문제가 발생합니다. – Archer

답변

12

나는 무슨 문제를 파악 시간 후 해결책을 발명했다.

코드에서 직접 변경됩니다.

참고 :이 지침을 따르려면 unminified version을 사용해야합니다. 라인


220

찾기 :

function selectIndex(obj, index) { 

변화 그것에 :

function selectIndex(obj, index, a) { 

라인 (270)

찾기 :

if (typeof settings.onSelected == 'function') { 
    settings.onSelected.call(this, pluginData); 
} 

변화 그것에 :

if (typeof settings.onSelected == 'function') { 
    if (a !== true) settings.onSelected.call(this, pluginData); 
} 

그리고 마지막으로 라인 (146)

에서 찾을

selectIndex(obj, index) 

다음 데 도움이

selectIndex(obj, index, true) 

희망으로 변경!

+0

selectIndex (obj, index, true)이 명령문이 작동하지 않으면 "true"인수에 오류가 발생합니다. – Naeem

+0

라인 220을 변경하려고 했습니까? 그래도 작동하지 않는다면 ddSlick의 새 버전을 사용할 수 있습니다. 모든 버그가 수정되어 새로운 멋진 기능이 추가되었습니다. check http://ddslickremablized.remabledesigns.com/ –

+0

또한 어떤 버전을 사용하고 있는지 잘 모르겠습니다. 최신 버전을 사용하는 것이 가장 좋습니다. –

4

언제든지 ddSlick Remablized을 확인하여 키보드, 수업 및 지원/사용 중지와 같은 멋진 기능을 추가 할 수 있습니다.

은 또는 당신은 당신이 찾을 수이 자기 함수 함수의 하단보다

function selectIndex(obj, index) {

로 이동하고 싶은

//Callback function on selection 
if (typeof settings.onSelected == 'function') { 
     settings.onSelected.call(this, pluginData); 
} 

해당 섹션을 잘라내어 다음 comme 위에 붙여 넣으십시오. NT

//If set to display to full html, add html

변경보다

if (typeof settings.onSelected == 'function' && ddSelected.text().length > 0) {

에 if 문

ddSlick Remablized도 Prashant Chaudhary 스스로에 대한 트윗되었습니다! 그것을 여기에서 확인하십시오 https://twitter.com/chaudharyp/status/268045906442584064

5

그것은 더럽고 kludgey지만, 빠른 수정 (축소 된 버전을 사용하고 있었고 내 코드의 작은 부분을 바꾸고 싶지 않았습니다)에서 작동했습니다. 방금 전역 bool을 정의하고 첫 번째로드에서 true로 설정했습니다.

var _ddlLoaded = false; 
$(function() { 
    $('#ddl').ddslick({ 
      data: ddlData, 
      onSelected: function (data) { 
       if(_ddlLoaded === false) { 
        _ddlLoaded = true; 
       } 
       else { 
        console.log(data.selectedData.value); 
       } 
    }); 
}); 
0

당신은이 jsFiddle

function oc(a){ 
    var o = {}; 
    for(var i=0;i<a.length;i++){ 
     o[a[i]]=''; 
    } 
    return o; 
    } 
    var temp = 0; 
    $('#flag').ddslick({ 
    imagePosition:"left", 
    background:"none", 
    width:"66px", 
    onSelected: function(data){ 
     var chosenCountry = data.selectedData.value; 
     chosenCountry = chosenCountry.toLowerCase(); 
     if(data.selectedIndex >= 0 && temp==1) { 
      if(chosenCountry in oc(['uk','de', 'es','fr','it'])) { 
      alert("translated pages"); 
      } 
     } 
     temp = 1; 
    } 
    }); 
관련 문제