Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature may not be available in some browsers.
$(".file_input")[0]
scusa non ho capito, se riesco ad accedere con $ perche non sarebbe un elemento jquery?Vorrei che tu imparassi come debuggare/risolvere queste problematiche, come ti ho detto il problema alla base sta rimanendo.
Quando usi delle librerie, devi utilizzarle di conseguenza - se usi una funzione di una libreria devi anche assicurarti che essa sia utilizzata su un elemento effettivamente riconosciuto.
Aggiungi un console log di questo:
Ti renderai conto che non è un elemento jQuery.JavaScript:$(".file_input")[0]
ok mi sono accorto che nel for mancava indicare l'indice ma cmq ancora nulla non vedo le anteprimeJavaScript:fileInput[cont].addEventListener("change", () => { cont++ //rotate -= 90; div = document.createElement("div"); for (let file of fileInput.files) ...
Dovresti vedere l'errore in un batter d'occhio solo da queste righe.
Comunque il codice è estremamente confuso, per poterti aiutare come si deve devi pulirlo o diventa impossibile.
Ci sono un sacco di cose inutilizzate o eventi che non fanno niente.
ho provato a corregere li errori ma ancora la console mi segnala erroriCiao,
ho provato a guardare e mi dispiace ma non riesco neanche a leggere il codice che hai scritto, o comunque ci metterei molto più tempo a capirlo che a riscriverlo, è molto confusionario e ci sono delle cose che sono logicamente (e purtroppo in modo importante) sbagliate.
Ti consiglio vivamente di, con i consigli delle precedenti risposte, provare a riscrivere da 0 tutta la logica tenendo un filo unico con le librerie che usi (se usi jQuery, usalo bene e ovunque - altrimenti rimani su VJS).
Inoltre, ti prego, cerca di essere ordinato - se dovessi mai lavorare su un progetto grande la mantenibilità è forse una delle cose più importanti, se la code base è illeggibile è impossibile mantenere il progetto.
Se ti riferisci al log nella console, è letteralmente lo stesso problema di qualche risposta fa che si ripresenta, stai cercando di usare una funzione jQuery su un elemento VJS.
Quando riformulerai una logica che sia leggibile sarò felice di darti una mano come nelle precedenti risposte, così è solo controproducente per te.
cont =0;
rotate = 0;
$(".file_input")[cont].on("change", () => {
//cont++;
//rotate -= 90;
div = document.createElement("div");
for(let file of $(".fileInput")[cont].files) {
var image = file
if (image) {
var imageElement = new Image();
imageElement.src = URL.createObjectURL(image);
imageElement.width = 100;
var imageElement2 = new Image();
imageElement2.src = "https://img.icons8.com/material-two-tone/24/000000/rotate-left.png";
//imageElement2.width = 100;
var imageElement3 = new Image();
imageElement3.src="https://img.icons8.com/material-rounded/24/000000/rotate-right.png";
var imageElement4 = new Image();
imageElement4.src="https://img.icons8.com/material-two-tone/24/000000/remove-image.png";
document.getElementById('gallery').appendChild(div);
div.appendChild(imageElement2);
div.appendChild(imageElement3);
div.appendChild(imageElement4);
div.appendChild(imageElement);
$(imageElement2).click(function(){
rotate = rotate - 90;
// rrotate = rotate + 90;
console.log(7)
$(imageElement).css("transform", "rotate("+rotate+"deg)");
// $(imageElement).css("transform", "rotate("+lrotate+"deg)");
});
$(imageElement3).click(function(){
// lrotate = rotate - 90;
rotate = rotate + 90;
console.log(7)
// $(imageElement).css("transform", "rotate("+lrotate+"deg)");
$(imageElement).css("transform", "rotate("+rotate+"deg)");
});
$(imageElement4).click(()=>{
$(imageElement).css("display","none");
})
}
}
$("img").click(function(){
console.log(4);
})
cont++
});
//cont=0;
$("#addimg").click(()=>{
// cont++
$(".file_input")[cont].click();
})
Scusa ho controllato varie volte il codice e non ho trovato elementi plain js in cui uso jq, potresti indicarmeli x favore? E poi quali sarebbero questi gravi errori di logica?hai letto i consigli del messaggio precedente? ci sono errori di logica gravi e come ti ho detto continui ad utilizzare funzioni jQ su elementi plain js
$(document).ready(function(){
$(".menu").siblings().hide();
$("#submit").show();
//$("input[type='submit']").show();
//$("input[type='file']").show();
$("#gallery").show();
//$('.menu, .submenu, .scarpe').val('select');
$(".menu, .submenu1, .submenu2, .misure_magliette").on("change", function(){
val = $(this).val();
console.log(val);
$("."+val).show();
console.log($(this).attr("class"));
if($(this).attr("class") == "menu"){
$("."+val).show();
$("."+val).siblings().hide();
$("#submit").show();
$(".menu").show();
console.log("ok")
}
if($(this).attr("class") == "submenu1" || $(this).attr("class") == "submenu2"){
$("#gallery").show();
}
// $("."+val).val('select');
// $("."+val).siblings().hide();
});
$("input[type='number']").mouseout(function(){
console.log($(this).val());
})
$("input[type='submit']").mouseover(function(){
})
//var fileInput = document.getElementById('file_input');
//fileInput = $(".file_input");
cont =0;
rotate = 0;
$(".file_input").eq(cont).on("change", () => {
//cont++;
//rotate -= 90;
div = document.createElement("div");
for(let file of $(".file_input").eq(cont).files) {
var image = file
if (image) {
var imageElement = new Image();
imageElement.src = URL.createObjectURL(image);
imageElement.width = 100;
var imageElement2 = new Image();
imageElement2.src = "https://img.icons8.com/material-two-tone/24/000000/rotate-left.png";
//imageElement2.width = 100;
var imageElement3 = new Image();
imageElement3.src="https://img.icons8.com/material-rounded/24/000000/rotate-right.png";
var imageElement4 = new Image();
imageElement4.src="https://img.icons8.com/material-two-tone/24/000000/remove-image.png";
document.getElementById('gallery').appendChild(div);
div.appendChild(imageElement2);
div.appendChild(imageElement3);
div.appendChild(imageElement4);
div.appendChild(imageElement);
$(imageElement2).click(function(){
rotate = rotate - 90;
// rrotate = rotate + 90;
console.log(7)
$(imageElement).css("transform", "rotate("+rotate+"deg)");
// $(imageElement).css("transform", "rotate("+lrotate+"deg)");
});
$(imageElement3).click(function(){
// lrotate = rotate - 90;
rotate = rotate + 90;
console.log(7)
// $(imageElement).css("transform", "rotate("+lrotate+"deg)");
$(imageElement).css("transform", "rotate("+rotate+"deg)");
});
$(imageElement4).click(()=>{
$(imageElement).css("display","none");
})
}
}
$("img").click(function(){
console.log(4);
})
cont++
});
//cont=0;
$("#addimg").click(()=>{
// cont++
$(".file_input").eq(cont).click();
})
/*
imageElement2.addEventListener("click", ()=>{
})
*/
})
...
Inoltre, ti prego, cerca di essere ordinato - se dovessi mai lavorare su un progetto grande la mantenibilità è forse una delle cose più importanti, se la code base è illeggibile è impossibile mantenere il progetto.
...
Quando riformulerai una logica che sia leggibile sarò felice di darti una mano come nelle precedenti risposte, così è solo controproducente per te.
ho usato il metodo eq di query , ma neanche cosi funziona, -- scusa ma x poi che ci provo non riesco a identificare il problemaCiao,
Ti rinnovo l'invito a riscrivere la logica da capo, facendo tesoro dei consigli nelle risposte al topic.
Per come è scritto adesso il codice si fa più fatica a leggerlo e capire i problemi che riscriverlo da 0 – dato che (spero) sei interessato ad imparare qualcosa – sarebbe assolutamente controproducente scriverti la soluzione ai problemi fornendoti la pappa pronta e, al contrario, assolutamente ORO che tu sbatta la testa sul problema e provi a risolverlo ripartendo da capo.
Ti consiglio inoltre nuovamente di leggere la documentazione di jQuery, hai ancora dubbi sulla differenza tra elementi jq e plain, è abbastanza grave nell'ottica del fatto che vuoi utilizzare la libreria.
$(".file_input").eq(cont).on("change", () => {
div = document.createElement("div");
for(let file of $(".file_input").eq(cont).files) {
...
// $("."+val).val('select');
// $("."+val).siblings().hide();
});
$("input[type='number']").mouseout(function(){
console.log($(this).val());
})
$("input[type='submit']").mouseover(function(){
})
//var fileInput = document.getElementById('file_input');
//fileInput = $(".file_input");
Scusa l.ignoranza, che vuol dire wipe? Cmq assegno un listener agli elementi usando un contatore perche logicamente il primo elemento rimane in ascolto e una volta che viene attivato la var cont sale e quindi il prossimo elemento rimane in ascolto e cosi via, nn capisco che ce che nn va in questa logicaCiao;
stai provando ad andare da Milano a Roma passando per la Grecia, ti stai complicando la vita usando delle funzioni che non servono (e una logica sbagliata).
JavaScript:$(".file_input").eq(cont).on("change", () => { div = document.createElement("div"); for(let file of $(".file_input").eq(cont).files) { ...
Perchè stai facendo questa cosa? Non ha senso, stai usando un contatore per assegnare dei listener a degli elementi quando puoi usare un ciclo normalissimo e usare poi la referenza di ogni elemento per tirare fuori i file presenti.
E potrei indicarti anche altre cose che non hanno senso.
Fai uno wipe completo del codice, riscrivilo da capo e io ti aiuterò a capire e risolvere eventuali (nuovi) problemi.
JavaScript:// $("."+val).val('select'); // $("."+val).siblings().hide(); }); $("input[type='number']").mouseout(function(){ console.log($(this).val()); }) $("input[type='submit']").mouseover(function(){ }) //var fileInput = document.getElementById('file_input'); //fileInput = $(".file_input");
Capisci che per chi ti aiuta leggere 100 righe di codice in cui ci sono cose del genere è veramente difficile oltre che controproducente per te stesso?
cont = 0;
$(".file_input").eq(cont).on("change", () => {
//cont++;
//rotate -= 90;
div = document.createElement("div");
for(let file of $(".file_input").eq(cont).files) {
var image = file
if (image) {
var imageElement = new Image();
imageElement.src = URL.createObjectURL(image);
imageElement.width = 100;
var imageElement2 = new Image();
imageElement2.src = "https://img.icons8.com/material-two-tone/24/000000/rotate-left.png";
//imageElement2.width = 100;
var imageElement3 = new Image();
imageElement3.src="https://img.icons8.com/material-rounded/24/000000/rotate-right.png";
var imageElement4 = new Image();
imageElement4.src="https://img.icons8.com/material-two-tone/24/000000/remove-image.png";
document.getElementById('gallery').appendChild(div);
div.appendChild(imageElement2);
div.appendChild(imageElement3);
div.appendChild(imageElement4);
div.appendChild(imageElement);
$(imageElement2).click(function(){
rotate = rotate - 90;
// rrotate = rotate + 90;
console.log(7)
$(imageElement).css("transform", "rotate("+rotate+"deg)");
// $(imageElement).css("transform", "rotate("+lrotate+"deg)");
});
$(imageElement3).click(function(){
// lrotate = rotate - 90;
rotate = rotate + 90;
console.log(7)
// $(imageElement).css("transform", "rotate("+lrotate+"deg)");
$(imageElement).css("transform", "rotate("+rotate+"deg)");
});
$(imageElement4).click(()=>{
$(imageElement).css("display","none");
})
}
}
$("img").click(function(){
console.log(4);
})
cont++
cont = 0;
$(".file_input").eq(0).on("change", () => {
//cont++;
//rotate -= 90;
div = document.createElement("div");
for(let file of $(".file_input").eq(0).files) {
var image = file
if (image) {
var imageElement = new Image();
imageElement.src = URL.createObjectURL(image);
imageElement.width = 100;
var imageElement2 = new Image();
imageElement2.src = "https://img.icons8.com/material-two-tone/24/000000/rotate-left.png";
//imageElement2.width = 100;
var imageElement3 = new Image();
imageElement3.src="https://img.icons8.com/material-rounded/24/000000/rotate-right.png";
var imageElement4 = new Image();
imageElement4.src="https://img.icons8.com/material-two-tone/24/000000/remove-image.png";
document.getElementById('gallery').appendChild(div);
div.appendChild(imageElement2);
div.appendChild(imageElement3);
div.appendChild(imageElement4);
div.appendChild(imageElement);
$(imageElement2).click(function(){
rotate = rotate - 90;
// rrotate = rotate + 90;
console.log(7)
$(imageElement).css("transform", "rotate("+rotate+"deg)");
// $(imageElement).css("transform", "rotate("+lrotate+"deg)");
});
$(imageElement3).click(function(){
// lrotate = rotate - 90;
rotate = rotate + 90;
console.log(7)
// $(imageElement).css("transform", "rotate("+lrotate+"deg)");
$(imageElement).css("transform", "rotate("+rotate+"deg)");
});
$(imageElement4).click(()=>{
$(imageElement).css("display","none");
})
}
}
$("img").click(function(){
console.log(4);
})
cont++
Ecco ^_^ a quanto pare il problema era quello, il metodo files del elemento input che funziona solo con vjs... Cmq visto che vogliamo jquerizzare tutto, mi chiedevo se con jquery si potessero creare nuovi elementi nel domWipe vuol dire pulire.
Perché vuoi usare un contatore in quel modo quando puoi benissimo usare un ciclo? E poi, dato che il contatore viene aumentato nell'evento, i nuovi listener verranno registrati solo se i precedenti sono stati triggerati (qui l'errore logico grave).
Evidentemente $(...).eq(...) non è un oggetto che ha la proprietà files, questo è quello che la console ti sta indicando.
Comunque sono confuso, ti ho postato una soluzione con un codice riscritto da 0, funzionante e pulito e mi chiedi di nuovo cose sul vecchio codice, ancora confusionario e con gli stessi errori logici di prima? Mi sono perso qualcosa?
Sinceramente non so più come aiutarti, non sto capendo più neanche io quali siano le domande
Si lo letto ma nn ci ho capito tanto, cmq vedi che ho impostato il listenee e la chiamata al metodo files con vjs,.. la prima volta che uso il bottoe x caricare la foto funziona, ma le altre no, e non capiscoJavaScript:fileInput[cont].addEventListener("change", ()=>{
scusa ma hai letto quello che ho scritto nelle risposte precedenti?
Non ha senso quello che stai facendo. Guarda la soluzione che ti ho proposto, perfettamente funzionante, e prendi spunto...Perché vuoi usare un contatore in quel modo quando puoi benissimo usare un ciclo? E poi, dato che il contatore viene aumentato nell'evento, i nuovi listener verranno registrati solo se i precedenti sono stati triggerati (qui l'errore logico grave).
Si so che funziona, ma piu che altro vorrei capire perché il mio codice non funzionaNon ha senso quello che stai facendo. Guarda la soluzione che ti ho proposto, perfettamente funzionante, e prendi spunto...
Scusami guarda, io ho impostato il listener al primo input file usando il contatore e al primo funziona okay, ma poi come vedi il contatore cresci di uno alla fine del change, e quindi dopo finito di usare il primo listener in automatico dovrebbe attivarsi il listener del secondo elemento input file visto che il contatore da 0 diventa 1.Non funziona perché non ha senso quello che stai cercando di fare, non so più come spiegartelo.
Hai un contatore settato a 0 che va ad applicare l'event listener all'oggetto dell'array in posizione counter (quindi iniziale = 0).
Quindi, per il primo elemento il listener funzionerà sempre mentre per gli altri no, visto che non vengono assegnati altri eventi.
infatti avevi ragione, condivido la soluzione qua, ora nn resta che poter inviare tutti queste immagine al server, e finora non ho mai fatto una cosa del genere, cioe prima con ajax inviavo solo dati testo, ora non saprei, secondo te conviene farlo con ajax e jq o usare vjs?Non funziona così, sarebbe una magia se ti funzionasse: il listener non viene assegnato automaticamente solo perché il contatore aumenta.
Stai facendo un errore logico abbastanza grave.
Tu stai assegnando un listener ad UN elemento (il primo), poi quando viene triggerato l'evento il contatore aumenta ma tu non stai assegnando alcun listener nuovo.
Per far sì che funzioni potresti wrappare l'assegnazione dei listener sugli elementi in una funzione che viene chiamata ogni volta che aggiungi un'immagine.
Comunque ti ripeto, guarda il codice che ho scritto per renderti conto di come fare
fetch("https://www.html.it/api/articoli", {
method: "post",
headers: new Headers({
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8
}),
body: new FormData(document.getElementById("titolo"), document.getElementById("autore"))
}).then(...).catch(...)