web-dev-qa-db-fra.com

JS: Comment déclencher un événement Blur avec mon code

J'ai besoin d'aide pour déclencher un événement Flou attaché à un champ d'agenda.

L'événement que j'essaie de déclencher est ajouté dans /media/system/calendar.js autour de la ligne 1003

JoomlaCalendar.prototype._bindEvents = function () {
    var self = this;
    this.inputField.addEventListener('blur', function(event) {
        var calObj = JoomlaCalendar.getCalObject(this)._joomlaCalendar;

Le champ auquel l'événement est attaché est le champ Démarrer la publication pour mes tests

<input type="text" id="jform_publish_up" name="jform[publish_up]" value="2012-01-04" size="22" class="inputbox" data-alt-value="2012-01-04" autocomplete="off">

Mon morceau de JS où j'essaie de déclencher l'événement Blur.

function addDate(target_field) 
{
    document.getElementById(target_field).value = currentDate();
    document.getElementById(target_field).blur();
}

La première ligne ajoute la date actuelle au champ et fonctionne correctement sur d'autres types de champs et fonctionnera sur les champs de calendrier à condition de placer le curseur dans le champ de calendrier et de laisser (c'est ce qui déclenche normalement le flou) à un moment donné avant d'essayer soumettre le formulaire.

Je l'ai suivi jusqu'à quelques lignes de code qui doivent être exécutées dans l'événement de flou ci-dessus qui permet à ma nouvelle valeur pour le champ d'être enregistrée et de ne pas être réinitialisée à la valeur qu'elle était auparavant.

La deuxième ligne est l'endroit où j'essaie de déclencher la fonction et ce qui est là est juste la dernière des choses qui ne semblent avoir aucun effet.

Et pour être complet, voici mon autre champ de test qui lance le processus d'ajout de la date au champ de publication de début.

<input type="text" name="jform[note]" id="jform_note" value="3432" class="inputbox" size="40" onchange="addDate('jform_publish_up')" maxlength="255" aria-invalid="false">

Ceci est une question complémentaire à celle-ci pour plus tôt dans la semaine, Comment mettre à jour un champ uniquement lorsqu'un autre fichier est modifié , et si je peux enregistrer les dates, je peux le fermer.

Mise à jour 17/11 - C'est le morceau de code que je crois que je dois exécuter après que ma valeur de date est ajoutée au target_field. /media/system/js/calendar.js à env. ligne 1013.

    if (calObj) {
        if (calObj.inputField.value) {
            if (typeof calObj.params.dateClicked === 'undefined') {
                calObj.inputField.setAttribute('data-local-value', calObj.inputField.value);

Sans que la valeur de données locales ne soit définie, et cela se produit lorsque le curseur quitte le champ, alors tout autre traitement dans calendar.js qui s'exécute sur Soumettre ramènera le champ à sa valeur d'origine. Vous pouvez le voir dans n'importe quel/la plupart des champs de date Joomla si vous inspectez l'événement pour le champ, vous pouvez ce code sous la troisième entrée qui est calendar.js

2
Irata

Parfois, vous ne pouvez pas voir la forêt pour les arbres.

Mon JS ressemble maintenant à ceci

function addDate(target_field) 
{
    document.getElementById(target_field).value = currentDate();
    document.getElementById(target_field).focus();
    document.getElementById(target_field).blur();
}

et il fonctionne !!!

1
Irata