Ej fungerande JS-kod i Internet Explorer [JS, ASP]

Permalänk

Ej fungerande JS-kod i Internet Explorer [JS, ASP]

Hej!

Har ett gjort litet enkelt webb-app som studenter kan göra för att testa sina kunskaper. Programmet renderar ut test med tillhörande frågor utifrån pinkod och testid

Det är slutna frågor med ett antal svarsalternativ. Studenterna kan välja välja svar genom att markera checkboxarna (som tillhör respektive svar). Tanken bakom designen är att om en fråga har t.ex. två rätta svar, så kan man bocka för MAX två checkboxar utifrån t.ex. 6 svarsalternativ.

Jag styr detta via JavaScript. Men av någon anledning fungerar detta INTE i Internet Explorer (dock fungerar det i FireFox). Det hela buggar ur och användare kan liksom lite godtycklig välja hur många svarsalternativ man vill genom att bocka för checkboxarna.

Koden ser ut följande. ASP-Checkbox-Controller:

<asp:CheckBox runat="server" ID="questionCheckBox" CssClass="h3" onclick="CheckBoxClick(this)" CheckedAnswerId="<%# Item.AnswerId %>" CheckQuestionId="<%# Item.RelatedQuestionId %>" AmmountOfCorrectAnswers="<%# CorrectAnswerCount %>"></asp:CheckBox>

När funktionen CheckBoxClick() anropas händer följande JS-kod:

question = []; for (var i = 0; i <= 50; i++) { var d = 0; question.push(d); } function CheckBoxClick(obj) { var getObjectParent = obj.parentNode; var getQuestionId = $(getObjectParent).attr("CheckQuestionId"); var getMaxChecks = ReturnCorrectAnswers(getQuestionId); if (obj.checked) { question[getQuestionId]++; } else { question[getQuestionId]--; } //We passed the limit of allowed checks, disable last selection if (question[getQuestionId] > getMaxChecks) { question[getQuestionId]--; obj.checked = false; } } function ReturnCorrectAnswers(getQuestionId) { var getAmmount = 0; $("span[CheckQuestionId=" + getQuestionId + "]").each(function () { var getMaxAnswers = $(this).attr('AmmountOfCorrectAnswers'); getAmmount = getMaxAnswers; }); return getAmmount; }

Ngt jag har missat?

Permalänk
Medlem

Får du några fel? Triggas metoden CheckBoxClick vid klick?

Permalänk
Medlem
Skrivet av DiAMONDBACK:

Hej!

Har ett gjort litet enkelt webb-app som studenter kan göra för att testa sina kunskaper. Programmet renderar ut test med tillhörande frågor utifrån pinkod och testid

Det är slutna frågor med ett antal svarsalternativ. Studenterna kan välja välja svar genom att markera checkboxarna (som tillhör respektive svar). Tanken bakom designen är att om en fråga har t.ex. två rätta svar, så kan man bocka för MAX två checkboxar utifrån t.ex. 6 svarsalternativ.

Jag styr detta via JavaScript. Men av någon anledning fungerar detta INTE i Internet Explorer (dock fungerar det i FireFox). Det hela buggar ur och användare kan liksom lite godtycklig välja hur många svarsalternativ man vill genom att bocka för checkboxarna.

Koden ser ut följande. ASP-Checkbox-Controller:

<asp:CheckBox runat="server" ID="questionCheckBox" CssClass="h3" onclick="CheckBoxClick(this)" CheckedAnswerId="<%# Item.AnswerId %>" CheckQuestionId="<%# Item.RelatedQuestionId %>" AmmountOfCorrectAnswers="<%# CorrectAnswerCount %>"></asp:CheckBox>

När funktionen CheckBoxClick() anropas händer följande JS-kod:

question = []; for (var i = 0; i <= 50; i++) { var d = 0; question.push(d); } function CheckBoxClick(obj) { var getObjectParent = obj.parentNode; var getQuestionId = $(getObjectParent).attr("CheckQuestionId"); var getMaxChecks = ReturnCorrectAnswers(getQuestionId); if (obj.checked) { question[getQuestionId]++; } else { question[getQuestionId]--; } //We passed the limit of allowed checks, disable last selection if (question[getQuestionId] > getMaxChecks) { question[getQuestionId]--; obj.checked = false; } } function ReturnCorrectAnswers(getQuestionId) { var getAmmount = 0; $("span[CheckQuestionId=" + getQuestionId + "]").each(function () { var getMaxAnswers = $(this).attr('AmmountOfCorrectAnswers'); getAmmount = getMaxAnswers; }); return getAmmount; }

Ngt jag har missat?

Du råkar inte plugga på nackademin?

Generellt skulle jag undvika onclick="" direkt i din markup. Lägg istället till eventen i din javascript fil.
Får du upp något felmeddelande i Internet Explorer's developer tool console?

Visa signatur

~. Citera så jag hittar tillbaka .~

Permalänk
Skrivet av KeVVa:

Du råkar inte plugga på nackademin?

Generellt skulle jag undvika onclick="" direkt i din markup. Lägg istället till eventen i din javascript fil.
Får du upp något felmeddelande i Internet Explorer's developer tool console?

Kanske

Hittade felet. Får inga felmeddelande. Har kollat rad för rad via IE Dev Console, breakpoints och logiken verkar fungera.

Problemet uppstår när man trycker på checkboxarna för snabbt via IE. Det frågeId med ett viss index i som ligger i question-arrayn får ett för lågt värde vilket leder till att man kan bocka fler checkboxar än det som är avsedd. Om man dock klickar tillräckligt långsamt fungerar scriptet som det ska.

Alltså, för varje klick/checkbox som är markerad skall alltså detta öka med ett:

if (obj.checked) { question[getQuestionId]++; }

Om det inte är det minskar vi med ett:

else { question[getQuestionId]--; }

Allting brakar ur om man då som sagt trycker för snabbt. Vilket gör att t.ex. question[11] kan ha ett värde som är -2 vilket gör att man bocka för 2 extra checkboxar. Man får helt enkelt skriva en liten-sats som kollar om question[11] < 0 och om så är fallet sätt question[11] = 0 samt kolla att antalet bockade checkboxar inte överstiger det maximalt antal tillåtna eller nått sånt

Permalänk