2017-09-25 2 views
0

Je suis en train de construire un plugin de téléchargement de fichiers à des fins d'étude, et j'ai du mal à faire en sorte que mon callback fonctionne comme je le souhaite. En bref, ce widget opère sur un champ de saisie de type file. Un peu de code pour mieux expliquer:Comment déclencher un événement personnalisé jQuery UI correctement?

$.widget('ultimatum.uploadify', { 
    create: function() { 
    // Irrelevant code here 
    }, 

    _onChange: function(event) { 
    // Private function that is fired when an "change" event 
    // is triggered by the input. 
    var files = event.target.files; 
    var fileInfo = {}; 

    // When the file processing finish, I want to trigger this custom event: 
    this._trigger("fileready", null, fileInfo); 
    } 
}); 

Ok, faire de cette façon, je peux gérer le rappel comme ceci:

$('#upload-files').uploadify({ 
    fileready: function(event, file) { 
    // My code here 
    } 
}); 

Le problème est que je veux gérer cet événement comme ceci:

$('#upload-files').uploadify(); 
$('.upload-files').on('fileready', function(event, file) { 
    // My code here. 
}); 

Bien que la première voie fonctionne parfaitement bien, ce dernier ne fonctionne pas. Est-il possible de gérer les événements jQuery personnalisés de cette façon, en utilisant "on"?

+0

Je vois '#' dans un sélecteur et '.' dans l'autre. Pensez que c'est un problème. – Twisty

Répondre

0

De http://api.jqueryui.com/jQuery.widget/

Events

Tous les widgets ont des événements associés à leurs différents comportements pour vous avertir lorsque l'état est en train de changer. Pour la plupart des widgets, lorsque les événements sont déclenchés, les noms sont préfixés avec le nom du widget et en minuscules. Par exemple, nous pouvons nous lier à l'événement change de la barre de progression qui est déclenché chaque fois que la valeur change.

$("#elem").bind("progressbarchange", function() {` 
    alert("The value has changed!"); 
}); 

Chaque événement a un rappel correspondant, qui est exposée en option. Nous pouvons nous connecter au rappel change de la barre de progression au lieu de nous lier à l'événement progressbarchange, si nous le souhaitons.

$("#elem").progressbar({ 
    change: function() { 
    alert("The value has changed!"); 
    } 
}); 

Tous les widgets ont un événement qui est déclenché créer sur instanciation.

Donc, pour votre widget, ceci ressemblera à:

$('#upload-files').uploadify(); 
$('#upload-files').on('uploadifyfileready', function(event, file) { 
    // My code here. 
}); 

Comme je l'ai mentionné dans le commentaire, je pense que $('.upload-files') peut-être une faute de frappe, et que le sélecteur est approprié $('#upload-files').