2013-12-08 2 views
0

내 플레이 사이트의 정보를 단순화하려고합니다.체크 박스가있는 기능 간을 전환 하시겠습니까?

두 가지가 있습니다. 사용자 유형, 학생 및 기타. 많은 상점과 상점은 학생들에게 할인을 제공하기 때문에 일부 스크립트를 변경하는 체크 박스를 사용하여 액세스 할 수있게 만들었습니다. 이 (내가 할 수있는만큼 좋은 simplifyed) 내 예입니다

<head> 
<script TYPE="text/javascript" SRC="script/script_uteplasser.js"></script> 
</head> 
<body> 
<form action=""> 
<input type="checkbox" id="checkbox_student" onclick="student();"><span>I'm A student!</span></input></form> 
(...) 
</body> 

자바 스크립트 (script_uteplasser) :

//--------------------SAMFUNDET--------------------- 
samfundet = "...blablablabla..." + cc_samfundet() + "...blablablabla..."; 
//----INNGANGSAV. SAMFUNDET---- 

var checkbox1 = document.getElementById("checkbox_student"); 
function student(){ 
    if (checkbox1.checked){ 
    function cc_samfundet(){var d=new Date(); var theDay=d.getDay(); switch (theDay) { case 1: return "Free"; break; case 2: return "Free"; break; case 3: return "Free"; break; case 4: return "Free"; break; case 5: return "Free"; break; case 6: return "Free"; break; case 0: return "Free";}} 
    } 
    else{ 
    function cc_samfundet(){var d=new Date(); var theDay=d.getDay(); switch (theDay) { case 1: return "100,-"; break; case 2: return "100,-"; break; case 3: return "100,-"; break; case 4: return "100,-"; break; case 5: return "100,-"; break; case 6: return "100,-"; break; case 0: return "100,-";}} 
    } 
} 
//------------------------------------------------- 

이 스크립트를 죽이지 않지만, 어느 정보를 반환하지 않습니다.

답변

0

평가에서 함수를 정의하기 때문에 아무 것도 반환하지 않습니다. 두 번째 괄호 쌍을 나중에 추가하면 의도 한대로 작동해야합니다.

이것은 말하지만, 이것은 정말 좋지 않은 디자인 패턴입니다. 우선 당신이 여기서하고있는 일을 실제로 할 필요는 없습니다. 두 번째는 똑같은 이름의 함수를 완전히 분리 된 논리로 두 번 생성한다는 것입니다.

업데이트 다음은 올바른 방향을 가리 키도록 뭔가가,

var checkbox1 = document.getElementById("checkbox_student"); 
// Assuming this function should do something else too? 
function student() { 
    cc_samfundet(checkbox1.checked); 
} 

var cc_samfundet = function (isStudent) { 
    var d = new Date(); 
    var theDay = d.getDay(); 
    switch (theDay) { 
     case 1: 
      return isStudent ? "Free" : "100,-"; 
      // and so on 
    } 
} 
+0

꽤 신선한, 괄호의 두 번째 쌍은 작동하지 않았다, 그러나 더 우아한 해결책이 바람직 할 것이다, 어떤 포인터 :)? – Freshman

+0

@Freshman 아무런 문제가 없습니다. 업데이트 –

+0

훨씬 더 부드럽고 시간을내어 걸림 거리가되었지만 지금은 잘 작동합니다. 감사합니다. :) – Freshman

1

왜 기능을 다시 정의 하시겠습니까?

확인란을 선택하면 기능을 체크인 할 수 있습니다. 이 코드 기능 사용을 재정의 정말 원하는 경우 당신은 아마 도니는 다르게, 발견했습니다,이에

//declare your function : 
function cc_samfundet() { 
    //... 
} 
//or : 
var cc_samfundet2 = function() { /* ... */ }; 

//redefine your function : 
cc_samfundet = function() { 
    //... 
} 
//or with an existing function : 
cc_samfundet = cc_samfundet2; 
관련 문제