2017-10-16 8 views
1

J'essaie de dissocier l'événement click et d'attacher un autre événement de clic après avoir cliqué une fois sur le bouton.Essayer de dissocier un événement de clic et d'attacher un nouvel événement

<small id="selectall_agriculture" onclick="refineSearch.testing('agriculture')">(select all)</small> 

Une fois la fonction de test est exécuté, je veux la fonction selectAllPropertyTypesInGroup() pour exécuter, mais au contraire, la fonction de test est appelé à chaque fois. Si je retire l'événement onclick de la petite balise et déclenche setGroupHeaderNotAllSelected() à partir d'un autre contrôle frontal, l'événement click créé avec $ ('# selectall_' + groupName) .click() dans la fonction setGroupHeaderNotAllSelected() fonctionne . J'ai l'impression que le unbind ne fonctionne pas parce que l'événement click est codé en dur dans la petite balise. Aucune suggestion?

refineSearch.testing = function (groupName) { 
    console.log("Click event from front end running instead of the one binded"); 
    setGroupHeaderNotAllSelected (groupName); 
}; 

var setGroupHeaderNotAllSelected = function (groupName) { 
    $('#selectall_' + groupName).unbind('click'); 
    $('#selectall_' + groupName).click(function() { 
     selectAllPropertyTypesInGroup(groupName); 
     return false; 
    }); 
}; 
+0

changement .cliquez, pour lier (clic? –

+1

Supprimez l'attribut 'onclick' et joindre l'événement à l'aide à la place discrète JS (par exemple jQuery 'on()'), puis utilisez 'off()' pour supprimer l'événement en cours avant d'ajouter le nouveau –

+0

@RoryMcCrossan Je ne crois pas que 'off()' puisse "dissocier" les gestionnaires d'événements inline Cependant, vous pouvez définir l'attribut 'onclick' sur null ce qui le désengagera effectivement – gforce301

Répondre

1

par jQuery doc la méthode unbind est dépréciée, utilisez off à la place (click est très bien, mais vous procédé peut look aton aussi)

$('#selectall_' + groupName).off('click').click(function() { 
    selectAllPropertyTypesInGroup(groupName); 
    return false; 
}); 

, vous devez également choisir entre déclarative onclick attribut défini et Liaison jQuery. Ainsi, au lieu de onclick attribut à l'aide, j'ajouter le hanlder via le script sur l'App début

$('#selectall_agriculture').click(function() { 
    refineSearch.testing('agriculture'); 
});