2
votes

J'obtiens une erreur lors de la numérotation en tant que fonction

Mon projet (sous peu):

  • Je fais la section des favoris dans le navigateur Yandex.

  • J'ai déjà créé un signet. Le code de ce projet était:
function imageData(e){
    for (var i = 0; i < e.originalEvent.srcElement.files.length; i++) {
        var file = e.originalEvent.srcElement.files[i];

        // image operation
        var reader = new FileReader();
        reader.onloadend = function() {
            source = String(reader.result);
        }
        console.log("asf")
        reader.readAsDataURL(file);
        addBookmark();
    }
}

Il n'y a aucun problème dans ce code. Fonctionner correctement. Mais je ne veux pas que le programme fonctionne lorsque l'entrée change dans mon projet actuel. Je veux que ce code fonctionne lorsqu'un bouton est enfoncé. J'ai écrit un code pour cela:

$("#siteImg").change(function(e){
    for (var i = 0; i < e.originalEvent.srcElement.files.length; i++) {
        var file = e.originalEvent.srcElement.files[i];

        // image operation
        var reader = new FileReader();
        reader.onloadend = function() {
            source = String(reader.result);
        }
        console.log("asf")
        reader.readAsDataURL(file);
        }
        addBookmark();
    })   

Ce code ne fonctionne pas correctement. Probablement la cause du problème " e ". Mais je ne pouvais pas le comprendre. Le message d'erreur dit:

 entrez la description de l'image ici

Consultez les codes ici


4 commentaires

Comment appelez-vous imageData () ?


cela peut également se produire si l'utilisateur clique sur l'entrée et annule sans choisir de fichier.


J'ai installé le code à la fin de l'article (nouveau). Vous comprenez mieux le problème à partir de là. @Arshad


Est-ce un problème X / Y? Si tel est le cas, il s'agit probablement d'une duplication de stackoverflow.com/questions/33553785/...


3 Réponses :


0
votes

Il arrive parfois que lorsqu'un écouteur d'événement en ligne implique l'objet événement, il ne sera pas trouvé. Il est préférable de transmettre une référence de fonction à partir de votre JavaScript:

$("#button").onclick = imageData;


4 commentaires

Mais le bouton n'a pas de fichiers


@mplungjan c'est le bouton Soumettre dans le formulaire.


J'ai installé le code à la fin de l'article (nouveau). Vous comprenez mieux le problème à partir de là.


e.originalEvent.srcElement ne trouvera pas .files sur l'événement de soumission



1
votes

originalEvent fait partie de jQuery et non de javascript . En Javascript, vous pouvez accéder directement à l'événement srcElement à partir de l'événement.

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button>Click</button>
// jQuery
$('button').on('click', function(e) {
    console.log(e.originalEvent.srcElement);
});

// Javascript
const button = document.querySelector('button');
button.addEventListener('click', function(e) {
    console.log(e.srcElement);
});


0 commentaires

0
votes

Si je comprends bien, vous appelez imageData () depuis différents endroits. Par exemple:

 $(".siteImg").change(function(e){
     imageData(e);
 }

Vous pouvez gérer tout l'événement de changement d'image à un seul endroit en ajoutant une classe siteImg et mettre à jour votre code comme:

$("#siteImg1").change(function(e){
     /**/
}

$("#siteImg2").change(function(e){
     /**/
}


0 commentaires