我有此功能可以正常工作。问题是当我要将“ myObj [x] .tipologia”传递给“ Abilita”函数时说“ myObj未定义”。
function showTipo(str){
var i=0;
$("#demo").remove();
;
var obj, dbParam, xmlhttp, myObj, x,t,txt = "";
var prova;
// obj = { "table":sel, "limit":20 };
// dbParam = JSON.stringify(obj);
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
if (this.readyState == 4 && this.status == 200) {
$("#secondo").before("<center><div id='demo' class='w3-row-padding w3-padding-64 w3-container'> </div></center>");
myObj = JSON.parse(this.responseText);
$("#demo").prepend("<div> <table border='1' width='75%'> <tr><th width='25%'>Tipologia</th><th width='25%'>Abilitata</th><th width='25%'>Azioni</th></tr></table><table border='1' id='tab' width='75%'></div> ");
for (x in myObj) {
i=i+1;
if(myObj[x].tipologia_abilitata != "2"){
if(myObj[x].tipologia_abilitata == "1")
{
myObj[x].tipologia_abilitata = "ABILITATO";
}
else
{
myObj[x].tipologia_abilitata = "DISABILITATO ";
}
prova=myObj[x].tipologia;
document.getElementById("tab").innerHTML+="<tr><td width='25%' id='cln'>" + myObj[x].tipologia + "</td> <td width='25%'> "+myObj[x].tipologia_abilitata + "</td> <td width='25%'><button onClick=Abilita(myObj[x].tipologia)>Abilita </button><button>disabilita</button></td></tr> ";
}}
document.getElementById("tab").innerHTML += "</table>";
}
$("#tab").after(" <br> <br><button class:'w3-button' onClick=AddTipologia()> Aggiungi Tipologia </button> <button onClick=ModificaTipologia()>Modifica</button>");
};
xmlhttp.open("POST", "VisualizzaCategorie.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("Nome_ente=" + str);
}
违规行是:
document.getElementById("tab").innerHTML+="<tr><td width='25%' id='cln'>" + myObj[x].tipologia + "</td> <td width='25%'> "+myObj[x].tipologia_abilitata + "</td> <td width='25%'><button onClick=Abilita(myObj[x].tipologia)>Abilita </button><button>disabilita</button></td></tr> ";
我不明白你为什么能帮助我?
onclick中是否存在报价错误?
答案 0 :(得分:0)
要使onclick属性起作用,它们引用的功能和参数都必须是全局的。但是x
在您的情况下不是全局的。
内联处理程序无论如何都是可怕的实践-它们导致难以管理的代码,例如此处。改用Javascript正确附加处理程序,它应该可以正常工作:
const tr = document.getElementById("tab").insertRow();
tr.outerHTML = "<tr><td width='25%' id='cln'>" + myObj[x].tipologia + "</td> <td width='25%'> "+myObj[x].tipologia_abilitata + "</td> <td width='25%'><button>Abilita </button><button>disabilita</button></td></tr>";
tr.querySelector('button').onclick = () => Abilita(myObj[x].tipologia);
请注意,您将无法分配给容器的innerHTML
并在其中保留处理程序-而是使用显式创建和附加元素的方法,例如document.createElement
和{{1 }}。