84 votes

comment changer l'événement onclick avec jquery?

J'ai créé un fichier js dans lequel je crée la table dynamique et modifie dynamiquement l'événement de clic pour le calendrier, mais en cliquant sur l'image du calendrier pour la table générée dynamiquement, le calendrier contextuel dans l'image de calendrier précédente. Aidez-moi, s'il vous plaît

code

 /***------------------------------------------------------------
* 
*Developer: Vipin Sharma
* 
*Creation Date: 20/12/2010 (dd/mm/yyyy)
* 
*ModifiedDate   ModifiedBy      Comments (As and when)
* 
*-------------------------------------------------------------*/
var jq = jQuery.noConflict();
var ia = 1;
jq(document).ready(function(){
    jq("#subtaskid1").click(function() {
        if(ia<=10){
      var create_table = jq("#orgtable").clone();
      create_table.find("input").each(function() {
        jq(this).attr({
          'id': function(_, id) { return ia + id },
          'name': function(_, name) { return ia + name },
          'value': ''               
        });
      }).end();
      create_table.find("select").each(function(){
            jq(this).attr({
                'name': function(_,name){ return ia + name }
            });
      }).end();
      create_table.find("textarea").each(function(){
            jq(this).attr({
                'name': function(_,name){ return ia + name }
            });
      }).end();
      create_table.find("#f_trigger_c").each(function(){
            var oclk = " displayCalendar(document.prjectFrm['"+ ia +"dtSubDate'],'yyyy-mm-dd', this)";                          //ERROR IS HERE
            var newclick = new Function(oclk);
            jq(this).click(newclick);
      }).end();
      create_table.appendTo("#subtbl");
      jq('#maxval').val(ia);
      ia++;
        }else{
            var ai = ia-1;
            alert('Only ' + ai + ' SubTask can be insert');
        }
    });
});

222voto

Amirali Points 476

Vous pouvez facilement modifier l' onclick d'un élément avec jQuery sans exécuter la nouvelle fonction avec :

 $("#id").attr("onclick","new_function_name()");

En écrivant cette ligne vous modifiez en fait le onclick attribut de #id .

Vous pouvez aussi utiliser:

document.getElementById("id").attribute("onclick","new_function_name()");

36voto

aizotov Points 466

Supprimer l'ancien gestionnaire d'événements

 $('#id').unbind('click');

Et attachez le nouveau

 $('#id').click(function(){
    // your code here
});

17voto

Memo36 Points 313

Mise à jour de cet article (2015) : unbind/bind ne devrait plus être utilisé avec jQuery 1.7+. Utilisez à la place la fonction off(). Exemple :

 $('#id').off('click');
$('#id').click(function(){
    myNewFunction();
    //Other code etc.
});

Assurez-vous d'appeler une fonction non paramétrée dans .click, sinon elle sera ignorée.

6voto

Mich. Gio. Points 198

$('#id').attr('onclick', 'function()');

À l'heure actuelle (11 juillet 2015), cette solution fonctionne toujours (jquery 2.1.4) ; à mon avis, c'est le meilleur à ramasser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X