2013-06-15 4 views
0
function checkData() { 
    var temp = 0; 
    var totalMarks = countMark(temp); 
    if (totalMarks != 100) 
     window.alert("Marks must total 100"); 
} 

function countMark(mark) { 
    var totalMark = 0; 
    totalMark += parseInt(mark) 
    return totalMark; 
} 

function doAdd() { 
    var taskid = document.getElementById("taskid").value; 
    var taskname = document.getElementById("taskname").value; 
    var taskmark = document.getElementById("taskmark").value; 

    if (taskid.length === 0) 
     window.alert("Task Id cannot be empty!"); 
    if (taskname.length === 0) 
     window.alert("Task name cannot be empty!"); 
    if (taskmark.length === 0) 
     window.alert("Task Mark cannot be empty!"); 
    else if (!markpattern.test(taskmark)) 
     window.alert("Invalid data in mark field"); 

    var marks = parseInt(document.getElementById("taskmark")); 
    if (marks < 0 || marks > 100) 
     window.alert("Marks out of range. Please re-enter"); 
    countMark(marks); 
} 

제 질문은 doAdd() 함수를 계속 호출하는 것입니다. 내 표시가 계속 추가됩니다. C++ 에서처럼 참조를 전달하고 싶습니다. 내 함수 countMark (...)가 계속 추가됩니다.계속 함수를 덮어 쓰지 않고 값을 계속 추가하십시오.

그 후, 내 양식을 제출하면 내 양식은 checkData() 함수를 호출합니다 내 totalmark가 100이 아니면. 경고 및 오류 메시지가 표시됩니다.

내 코드가 작동하지 않습니다. 내 countMark 함수가 어딘가에있는 것 같아요.

+0

총계에 'var totalMark = 0;'및 'countMark'범위 내에있는 'totalMark'를 재 할당합니다. '() window.totalMark) window.totalMark = 0;처럼 시도하십시오 – rab

+0

[jsfiddle] (http://jsfiddle.net)을 제공 할 수 있습니까? –

+0

@LightStyle jsfiddle을 만들어주세요 .. 내가 너를 위해 그것을 고치겠습니다. 나는 시간이 덜 걸립니다. – rab

답변

0

올바르게 이해하면 정적 변수에 해당하는 것을 찾고 있습니다. 함수가 처음 호출 될 때 초기화되고 후속 호출에 대한 값을 유지합니다.

이 관련 질문을 살펴 보자 : (CMS에 의해) https://stackoverflow.com/a/1535650/2444111

상단 대답은 확실히 같은 것이 아니다 클래스 기반 정적 변수에 대해 얘기하고있다.

두 번째 대답은 (파스칼 마틴에 의해) 당신이 찾고있는 것입니다. JS 함수도 객체이므로 변수를 함수 객체의 속성으로 저장한다는 점을 이용합니다. 전역 변수 (또는 전역 변수가 실제로 사용되는 창 속성)를 사용하는 것보다 더 좋은 해결책입니다.

0

코드에 몇 가지 문제점이 있으며 의도가 무엇인지 말할 수 없습니다. 그러나 나는 내가 발견 한 것을 다룰 것이다.

다음 코드에서는 DOM 요소를 요청하고 정수로 구문 분석하려고합니다. 해당 형식 변환의 결과는 항상 NaN입니다. 예전처럼 요소의 value 속성을 얻고 싶었을 것입니다. (또한 동일한 요소를 여러 번 요청하지 마십시오. 한 번 요청하여 결과를 변수에 저장하고 그 변수를 사용하십시오). 항상 당신이 (당신의 코드에 주석을 참조)에 전달할 어떤 번호 반환하기 때문에

var marks = parseInt(document.getElementById("taskmark")); 
if (marks < 0 || marks > 100) 
    window.alert("Marks out of range. Please re-enter"); 
countMark(marks); 

함수 countMark는 꽤 쓸모가 없다.

var totalMark = 0; 
function countMark(mark) { 
    totalMark += parseInt(mark); 
    return totalMark; 
} 

마지막으로, 당신의 기능을 분석 할 수 있습니다 checkData :

function countMark(mark) { 
    var totalMark = 0; //create a new variable with value 0 
    totalMark += parseInt(mark) //add "mark" to that variable 
    return totalMark; //return that variable => 0 + mark = mark (and if mark = NaN => 0 + mark = NaN) 
} 

아마 당신은 당신이 함수의 외부에서 정의해야하는 것보다, totalMark에게 전역 변수를 만들고 싶었다

function checkData() { 
    var temp = 0; //create a local variable with value 0 
    var totalMarks = countMark(temp); //pass 0 to countMark => return 0 => totalMarks = 0 
    if (totalMarks != 100) //always true since totalMarks is always 0 
     window.alert("Marks must total 100"); //will always alert 
} 
관련 문제