이것을 디버그하려고 시도하지만 그것은 나를 넘어서는 것입니다. 저는 Calendar Drupal 모듈에append()
의해 생성 된 td에 대해 jQuery를 HTML로 사용하여 학교 일정을 프로그래밍하고 있습니다.
내 코드는 다음과 같습니다.
jQuery(document).ready(function($) {
/* Schedule */
last = "lesson";
lesson = 71;
test = 13;
inv = 7;
function m10() {
if (lesson % 10 == 0) {
return true;
} else {
return false;
}
}
function m5() {
if (lesson % 5 == 0) {
return true;
} else {
return false;
}
}
function pMath1() {
if (m10() == false && last !== "test") {
lesson++;
last = "lesson";
return "Lesson " + lesson;
} else if (m5() == true && last !== "test") {
test++;
last = "test";
return "Test " + test;
} else if (m10() == true && last == "test") {
inv++;
last = "inv";
return "Inv " + inv;
} else {
console.log("pMath1 doesn't work");
}
}
function pMath2() {
if (m10() == false) {
lesson++;
last = "lesson";
return "Lesson " + lesson;
} else if (m5() == true && last !== "test") {
test++;
last = "test";
return "Test " + test;
} else if (m10() == true && last == "test") {
inv++;
last = "inv";
return "Inv " + inv;
} else {
console.log("pMath2 doesn't work");
}
}
$(".view-id-school .single-day td:gt(6)").each(function() {
var datePrep = $(this).attr("data-date");
var dateSplit = datePrep.split("-");
var dateStr = new Date(dateSplit[0], dateSplit[1], dateSplit[2]);
var dateStr2 = new Date(2016, 12, 03);
var classN = $(this).attr("headers");
if (classN == "Monday" || classN == "Wednesday" || classN == "Friday") {
$(this).removeClass("no-entry");
var mathC = "M: " + pMath1() + ", " + pMath2();
} else if (classN == "Tuesday" || classN == "Thursday") {
$(this).removeClass("no-entry");
var mathC = "M: " + pMath1();
} else {
mathC = "";
};
content = mathC;
if (dateStr > dateStr2) {
$(this).find(".inner").empty().append('<div class="calendar monthview"><div class="views-field views-field-title"><span class="field-content">' + content + '</span></div><div class="cutoff" /></div></div></div>');
}
});
});
업데이트 : 문제는 pMath1 ()이 항상 "Inv 8"을 반환하고 pMath2 ()가 정의되지 않은 상태로 유지된다는 것입니다.
업데이트 2 : 좋아,이 코드로 작동합니다. 모든 도움을 주신 Xufox 및 Rimon Habib 에게 특별히 감사드립니다 .
jQuery(document).ready(function ($) {
/* Schedule */
dateStr2 = new Date(2016, 12, 03);
last = "lesson";
lesson = 71; //Lesson you want to start on minus 1
test = 13; //Test you want to start on minus 1
inv = 7; //Investigation you want to start on minus 1
function m10 () { if ( lesson % 10 == 0) { return true; } else { return false; } }
function m10M1 () { if ( ( (lesson % 10) - 1) == 0 && last == "inv" ) { return true; } else { return false; } }
function m5 () { if ( lesson % 5 == 0) { return true; } else { return false; } }
function pMath1 () {
if ( m10M1() ) { //Check if Lesson is x1 (e.g. 81) and minus 1 from it
last = "lesson";
return "Lesson " + lesson;
} else if ( m10() == false && last !== "test") { //Add Lesson
lesson++;
last = "lesson";
return "Lesson " + lesson;
} else if ( m5() == true && last !== "test") { //Add Test
test++;
last = "test";
return "Test " + test;
} else if ( m10() == true && last == "test") { //Add Inv
inv++;
lesson++;
last = "inv";
return "Inv " + inv;
} else {
console.log("pMath1 doesn't work");
}
}
function pMath2 () {
if ( m10M1() ) { //Check if Lesson is x1 (e.g. 81) and minus 1 from it
last = "lesson";
return "Lesson " + lesson;
}else if ( m10() == false ) { //Add Lesson
lesson++;
last = "lesson";
return "Lesson " + lesson;
} else if ( m5() == true && last !== "test") { //Add Test
test++;
last = "test";
return "Test " + test;
} else if ( m10() == true && last == "test") { //Add Inv
inv++;
lesson++;
last = "inv";
return "Inv " + inv;
} else {
console.log("pMath2 doesn't work");
}
}
$(".view-id-school .single-day td:gt(6)").each(function () {
var datePrep = $(this).attr("data-date");
var dateSplit = datePrep.split("-");
var dateStr = new Date(dateSplit[0], dateSplit[1], dateSplit[2]);
var classN = $(this).attr("headers");
if ( classN == "Monday" || classN == "Wednesday" || classN == "Friday") {
$(this).removeClass("no-entry");
var mathC = "M: " + pMath1 () + ", " + pMath2 ();
} else if (classN == "Tuesday" || classN == "Thursday") {
$(this).removeClass("no-entry");
var mathC = "M: " + pMath1 ();
} else {
mathC = "";
};
content = mathC;
if ( dateStr > dateStr2 ) {
$(this).find(".inner").empty().append('<div class="calendar monthview"><div class="views-field views-field-title"><span class="field-content">' + content + '</span></div><div class="cutoff" /></div></div></div>');
}
console.log("Last: " + last + " <br /> Lesson: " + lesson + " <br /> inv: " + inv + " <br /> test: " + test + " <br /> " + "Content: " + content);
});
});
좋습니다. 함수와 return 문에 대한 기본은 함수의 어느 지점에서든 return을 호출하면 return 문이 실행되지 않은 후에 해당 함수의 코드가 남아 있다는 것입니다.
따라서 pMath1 함수의 경우 inv = 8의 초기 값;
pMath1 () 함수를 발견하면
function pMath1 () {
if ( m10() == false && m5() == false && last !== test) {
return "Lesson " + lesson; // code execution stops here as return called
lesson++; // lesson value is not gonna increment
last = "lesson"; // neither last value will update
} else if ( m10() == false && m5() == true) {
return "Test " + test; // again, code execution stops here
test++; // test value will not increment
last = "test"; // neither this will be executed
} else if ( m10() == true ) {
return "Inv " + inv; // and here is our inv variable, it was 8, we are returning 8, not giving chance inv to increase as stated line below
inv++;
last = "inv";
} else {
console.log("pMath1 doesn't work");
}
}
따라서 내 의견을 따르면 무엇을 해야할지 알 수 있지만 pMath1 ()을 조정하고 있습니다.
function pMath1 () {
if ( m10() == false && m5() == false && last !== test) {
lesson++; // now lesson value will increase
last = "lesson"; // and this one will also execute
return "Lesson " + lesson; // and when we are done, we can return and halt execution here; by this time our variables are processed.
} else if ( m10() == false && m5() == true) {
test++;
last = "test";
return "Test " + test; // same approach again
} else if ( m10() == true ) {
inv++;
last = "inv";
return "Inv " + inv; // and here is our holy grail, we gave chance inv to increase first, now we are returning its incremented value. it will be no longer stick with 8.
} else {
console.log("pMath1 doesn't work");
}
}
자, 이제 우리의 inv 변수가 8로 고착되어서는 안됩니다. return을 사용하는 방법을 알고 있으므로 동일한 실수가 있으므로 pMath2 ()에서 동일한 작업을 시도 할 수 있습니다. 그것으로 재미를 :)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다