Comment puis-je déclencher l'événement click d'un autre élément en ng-cliquez sur l'aide de angularjs?
Je suis en train de déclencher l'événement click du <input type="file">
élément de la button
.
<input id="upload"
type="file"
ng-file-select="onFileSelect($files)"
style="display: none;">
<button type="button"
ng-click="angular.element('#upload').trigger('click');">Upload</button>
Il est de pratique courante pour masquer la uglified bête appelée <input type=file>
et déclencher cliquez sur l'événement par d'autres moyens.
Vous devez vous connecter pour publier un commentaire.
Si votre entrée et le bouton sont les frères et sœurs (et ils sont dans votre cas OP):
Utiliser une directive pour lier le clic de bouton pour le fichier d'entrée comme suit:
scope: { siblingId: '=' }
l'utilisation de la directive comme<button uploadfile sibling-id="upload">Upload</button>
$timeout
de sorte que vous assurez-vous qu'il s'exécute dans un$apply
cycleC'était donc une solution simple. Juste eu à déplacer le
ng-click
à une étendue cliquez sur gestionnaire de:angular.element.click()
pour la jqlite cliquez sur l'événement ouangular.element.get(0).click()
pour le mode natif.el.srcElement.previousElementSibling.click();
J'ai eu ce même problème et ce violon est le shizzle 🙂 Il utilise une directive pour bien le style le champ fichier et vous pouvez même en faire une image ou quoi que ce soit.
http://jsfiddle.net/stereosteve/v5Rdc/7/
JS:
HTML:
Si vous obtenez $portée de liaison des erreurs assurez-vous d'envelopper le code d'événement click sur un setTimeout Fonction.
VUE
CONTRÔLEUR
$timeout
?pour jqLite suffit d'utiliser triggerHandler avec le nom de l'événement, afin De simuler un "clic", essayez:
JS:
Voici la liste des commandes jQLite
Simplement les avoir dans le même contrôleur, et de faire quelque chose comme ceci:
HTML:
JS:
C'est, à mon avis, la meilleure façon de le faire dans angulaire. Utilisation de jQuery pour trouver l'élément et le déclenchement d'un événement n'est pas la meilleure pratique.
<input type=file>
bouton est caché parce que c'est un pain PITA de style correctement sur tous les navigateurs.Je viens de tomber sur ce problème et ont rédigé une solution pour ceux d'entre vous qui utilisent Angulaire. Vous pouvez écrire une coutume directive composé d'un récipient, d'un bouton, et un élément input de type file. Avec CSS, vous placez la saisie sur le bouton personnalisé, mais avec une opacité de 0. Vous définissez les conteneurs de la hauteur et de la largeur à exactement le décalage de la largeur et de la hauteur du bouton, et l'entrée de la hauteur et de la largeur à 100% du récipient.
la directive
un modèle jade si vous utilisez jade
le même modèle en html si vous utilisez html
le css
La solution, comme l'ont souligné d'autres réponses, est d'utiliser
Voici un exemple de la façon dont je choisir au hasard plusieurs
select
éléments:J'ai pris la réponse posté par Osiloke (ce Qui était le plus facile et le plus complet à mon humble avis) et j'ai ajouté un changement écouteur d'événement. Fonctionne très bien! Grâce Osiloke. Voir ci-dessous si vous êtes intéressés:
HTML:
Directive:
Contrôleur:
Un plus directive
html
code
meilleur et simple à utiliser natif java Script qui est une ligne de code.
document.querySelector('#id').click();
Ajoutez 'id' pour votre élément html comme
<button id="myId1" ng-click="someFunction()"></button>
vérification de l'état dans le code javascript
if(condition) {
document.querySelector('#myId1').click();
}
Je pense que vous avez plus compliqué un peu les choses. Avez-vous vraiment besoin de déclencher un clic sur l'entrée de votre bouton ?
Je suggère que vous venez d'appliquer un style propre à votre entrée et à la ngFileSelect directive fera le reste, et appelez votre onFileSelect fonction à chaque fois qu'un fichier est soumis :