2012-03-12 6 views
0

아래 코드를 몇 줄로 압축 할 수 있습니까? 8 가지 이벤트에 대해 _jq_overlay_x_jq_overlay_y 문이 비슷합니다. 나는 그것이 최적화를 위해 더 좋을 것 같은 줄을 압축하는 것이 더 좋을 것이라고 생각한다. 사전에자바 스크립트 코드의 단순화

감사

$(document).ready(function(){ 
     $('#_jq_overlay_x').click(function(event) { 
      event.preventDefault(); 
      $('#_jq_overlay1').fadeOut(500); 
     }); 

     $('#_jq_overlay_y').click(function(event) { 
      event.preventDefault(); 
      $('#_jq_overlay1').fadeIn(500); 
     }); 
     $('#_jq_overlay_x').click(function(event) { 
      event.preventDefault(); 
      $('#_jq_overlay2').fadeOut(500); 
     }); 

     $('#_jq_overlay_y').click(function(event) { 
      event.preventDefault(); 
      $('#_jq_overlay2').fadeIn(500); 
     }); 
      $('#_jq_overlay_x').click(function(event) { 
      event.preventDefault(); 
      $('#_jq_overlay3').fadeOut(500); 
     }); 

     $('#_jq_overlay_y').click(function(event) { 
      event.preventDefault(); 
      $('#_jq_overlay3').fadeIn(500); 
     }); 
      $('#_jq_overlay_x').click(function(event) { 
      event.preventDefault(); 
      $('#_jq_overlay4').fadeOut(500); 
     }); 

     $('#_jq_overlay_y').click(function(event) { 
      event.preventDefault(); 
      $('#_jq_overlay4').fadeIn(500); 
     }); 
      $('#_jq_overlay_x').click(function(event) { 
      event.preventDefault(); 
      $('#_jq_overlay5').fadeOut(500); 
     }); 

     $('#_jq_overlay_y').click(function(event) { 
      event.preventDefault(); 
      $('#_jq_overlay5').fadeIn(500); 
     }); 
      $('#_jq_overlay_x').click(function(event) { 
      event.preventDefault(); 
      $('#_jq_overlay6').fadeOut(500); 
     }); 

     $('#_jq_overlay_y').click(function(event) { 
      event.preventDefault(); 
      $('#_jq_overlay6').fadeIn(500); 
     }); 
      $('#_jq_overlay_x').click(function(event) { 
      event.preventDefault(); 
      $('#_jq_overlay7').fadeOut(500); 
     }); 

     $('#_jq_overlay_y').click(function(event) { 
      event.preventDefault(); 
      $('#_jq_overlay7').fadeIn(500); 
     }); 
      $('#_jq_overlay_x').click(function(event) { 
      event.preventDefault(); 
      $('#_jq_overlay8').fadeOut(500); 
     }); 

     $('#_jq_overlay_y').click(function(event) { 
      event.preventDefault(); 
      $('#_jq_overlay8').fadeIn(500); 
     }); 
}); 

답변

1
$(document).ready(function(){ 
    var elms=[]; 
    for (var i=1; i<=8;i++) { 
     elms.push($('#_jq_overlay'+i)[0]); 
    } 
    $('#_jq_overlay_x').click(function(event) { 
     event.preventDefault(); 
     $(elms).fadeOut(500); 
    }); 

    $('#_jq_overlay_y').click(function(event) { 
     event.preventDefault(); 
     $(elms).fadeIn(500); 
    }); 
});​ 

여기에 작동하는 것으로 표시되는 FIDDLE입니다.

+0

아니요, 이것으로 전체 미리보기가 깨졌습니다 – Marko

+0

'$ ('#_ jq_overlay'+ i) [0]'->'$ ('#_ jq_overlay'+ i) .get (0)'? 그냥 생각 – Johan

+0

@ 마코 - 그것은 나를 위해 잘 작동하는 것, 내 대답에 바이올린을 추가하여 모든 요소에 영향을 줄 수 있습니다. – adeneo

2

어느 대신 ID의 나처럼 뭔가에 비슷한 사람을 모두 결합하여 사용 클래스 : 한 번의 클릭을 사용하고 개체 .is(':visible') 있는지 확인, 그리고

$("#object1, #object2, #object3, ...").click(function() { ... }); 

그것을 숨기거나 보여주기.

+1

이 모든 질문에 대한 답처럼이 정말 소리를하지 않습니다를 참조하십시오. –

2

나는이 단축 될 수 있다고 생각 :

$('#_jq_overlay_x,#_jq_overlay_y').click(function(event) { 
    event.preventDefault(); 
    for (var i=1;i<9;(i=i+1)){ 
    $('#_jq_overlay'+i)[(/_y/i.test(this.id) ? 'fadeIn' : 'fadeOut')](500); 
    } 
}); 

this jsfiddle 모형

+0

Firefox, Chrome, Safari, Opera에서 작동하지만 IE7/8에서는 작동하지 않습니다. – Marko

+0

클릭 핸들러 기능이 작동합니다. IE7/8은 css'rgb (a)'속성을 알지 못하기 때문에 jsfiddle 모형에서 상자는 IE7/8에 표시되지 않습니다. 예를 조정했는데 이제는 모든 IE 버전에서도 작동합니다. – KooiInc

+0

정말 짧은 해결책과 멋진 스크립트에 대해서는 +1하지만 질문을 보면 나는 OP가 실제로 그 바이올린에서 무슨 일이 일어나고 있는지 전혀 알지 못한다고 생각합니까? 덕분에 @ adeneo. – adeneo

관련 문제