JavaScript eseménykezelés for ciklussal
JavaScriptben akarok egy olyan függvényt létrehozni, aminek pár paraméter átadásával létrehozhatok több div taget és ezekre a tagekre kattintgatva küldök a szervernek adatokat. Utóbbi remekül működik, egy kis szépséghiba, hogy ha for ciklussal próbálom megoldani, hogy x számú nyomógombom legyen, akkor csak az utolsó gomb kapja meg az eseményeket. Miért?
A kód:
■ A kód:
- function createQuestion(main_div_name, question_text, answer_div_name, answer_div_text, post_to, post_name, post_value){
- main_div = document.createElement("div");
- main_div.id = main_div_name;
- document.getElementById("container_div").appendChild(main_div);
- question_h1 = document.createElement("h1");
- question_h1.id = "question_" + main_div_name;
- document.getElementById(main_div_name).appendChild(question_h1);
- document.getElementById("question_" + main_div_name).innerHTML = question_text;
- document.getElementById("question_" + main_div_name).style.margin = 0;
- document.getElementById("question_" + main_div_name).style.color = "#F6F6E8";
- document.getElementById("question_" + main_div_name).style.paddingTop = "100px";
- var answer_div_name_array = answer_div_name.split("|");
- var answer_div_name_array_length = answer_div_name_array.length;
- var answer_div_text_array = answer_div_text.split("|");
- for(i = 0; i < answer_div_name_array_length; i++){
- var onmouseTest = answer_div_name_array[i];
- answer = document.createElement("div");
- answer.id = answer_div_name_array[i];
- document.getElementById(main_div_name).appendChild(answer);
- part_of_body_height = body_height/3.5;
- document.getElementById(answer_div_name_array[i]).style.width = "200px";
- document.getElementById(answer_div_name_array[i]).style.background = "#D43F3F";
- document.getElementById(answer_div_name_array[i]).style.color = "#F6F6E8";
- document.getElementById(answer_div_name_array[i]).style.fontSize = "20px";
- document.getElementById(answer_div_name_array[i]).style.display = "inline-block";
- document.getElementById(answer_div_name_array[i]).style.margin = "10px";
- document.getElementById(answer_div_name_array[i]).style.marginTop = part_of_body_height + "px";
- document.getElementById(answer_div_name_array[i]).style.padding = "30px 0 30px 0";
- document.getElementById(answer_div_name_array[i]).innerHTML = answer_div_text_array[i];
- document.getElementById(onmouseTest).onmouseover = function(){
- console.log("DIV NEVE: " + onmouseTest);
- console.log("DIV ÉRTÉKE: " + answer_div_text_array[i]);
- document.getElementById(onmouseTest).style.background = "#00ACE9";
- document.getElementById(onmouseTest).style.cursor = "pointer";
- };
- document.getElementById(onmouseTest).onmouseout = function(){
- if(document.getElementById(onmouseTest)){
- document.getElementById(onmouseTest).style.background = "#D43F3F";
- }
- };
- }
- }
- createQuestion("test_question", "I ask something", "answer_1|answer_2", "First answer|Second answer");
Closure
Egyébként nem csak az utolsó gombod kapja meg az eseményeket. Mindegyik megkapja, csak mindegyik ugyanazt fogja kiírni, mivel
i
értéke az esemény kiváltásakor az utolsó érték lesz, amiti
felvett (amikor a ciklus végetért).