Попытка отладить это, но это просто вне меня. Я программирую расписание для школы, используя jQuery для append()
HTML для td, сгенерированных Calendar Drupal module.JS-код не работает как ожидалось
- Имеются испытания, исследования и уроки.
- Проверяйте каждые 5 уроков и расследование каждые 10.
- В понедельник, среду и пятницу вы получаете две «вещи» (два урока, тест или расследование, урок и тест, или расследование, и урок)
- Во вторник и в четверг вы получаете только один урок, испытание или расследование
- Он не начинается с урока 1, теста 1 или inv 1, а на уроке 72, тесте 14 и исследовании 8.
Вот мой код:
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>');
}
});
});
Update: Проблема заключается в том, что pMath1() всегда возвращает "Inv 8" и pMath2() остается неопределенным
Update 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);
});
});
В чем же проблема? – Xufox
Почему вы определяете функции внутри цикла '.each'? Вы когда-нибудь слышали о многократном использовании кода? –
Первый недостаток, который я заметил в вашей логике: «Урок» никогда не будет обновляться. 'lesson' начинается с' 72' и _could_ увеличивается на 1 в 'pMath1' и' pMath2' при условии, что (по крайней мере) 'm10' возвращает' false' (соответствует всем 'm10() == false' чеки). Однако 'm10' вернет' false', если 'lesson% 10' возвращает' 0', чего он никогда не делает ('урок% 10' равен' 2'). Второе: 'm10 == false' в' m5' должно быть 'm10() == false'. Вам нужно переосмыслить свою логику. – Xufox