1
votes

Comment utiliser la fonction définie par l'utilisateur pour le chaînage jquery

Mon exigence est comme le chaînage de jquery avec une fonction définie par l'utilisateur

J'ai essayé le code suivant.

var content = $('<div />', {
  'id': 'pia_editable_'
}).change(function(e) {
  alert('change called');
}).condchain(some values);

function condchain(v) {
  alert('hh');
}

Il lance une erreur de fonction non définie

p >


0 commentaires

3 Réponses :


2
votes

Mettez la fonction sur $ .fn à la place:

$.fn.condchain = function condchain(v) {
  alert('hh');
}
var content = $('', { 'id': 'pia_editable_' })
  .change(function(e) {
    alert('change called');
  })
  .condchain(some values);


0 commentaires

1
votes

Tout ce que vous avez à faire est d'étendre les fonctions JQuery avec vos fonctions personnalisées comme dans le commentaire ci-dessus que vous pouvez utiliser $ .fn. = function (params) {}; pour étendre les fonctions natives de jQ Veuillez consulter Que signifie $ .fn dans jQuery ? pour plus de détails.

Merci, Bon codage <3!


0 commentaires

2
votes

Pour que jQuery reconnaisse votre fonction, il doit être ajouté à $.fn.

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='div'>text</div>
<div class='div'>text</div>

cela vous donne alors accès à ceci code> qui serait le contexte jquery actuel, par exemple:

$.fn.myFunc = function(txt) { 
  // this = jquery context
  $(this).each(function(i, e) {
    // this now = loop iteration
    var that = $(this); 
    setTimeout(function() { that.text(txt) }, 500 * (i + 1)); 
  });
  return this;
};

$(".div").myFunc("changed").css("color", "red");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id='div'>text</div>

Pour ajouter un chaînage , il vous suffit de renvoyer this . Vous pouvez également utiliser $ (this) .each ... si vous voulez faire autre chose qu'une opération groupée, par exemple:

$.fn.myFunc = function(txt) { var that = this; setTimeout(function() { that.text(txt) }, 500); };
$("#div").myFunc("changed");
$.fn.condchan = function() { };

Vous pouvez faire plus pour créer un plugin réutilisable à part entière et cette page devrait être votre point de départ: https://learn.jquery.com/plugins/basic-plugin-creation/


4 commentaires

J'ai essayé, mais j'ai toujours cette erreur. Uncaught TypeError: $ (...). Change (...). Condchain n'est pas une fonction sur PostItAll.create (jquery.postitall.js: 2417) sur PostItAll.init (jquery.postitall.js: 967) sur jquery .postitall.js: 656


Pouvez-vous créer un violon sur jsfiddle.net pour démontrer qu'il ne fonctionne pas?


Vous devez vous assurer que le code $ .fn.condchain est avant $ (..). Condchain () , exemple: jsfiddle.net/nojsfk5c (c'est après dans votre code d'origine)


Lisez l ' exemple minimal reproductible . Je ne demande pas votre bibliothèque, je demande un extrait de code qui démontre qu'elle ne fonctionne pas car j'ai fourni un extrait de code indiquant qu'elle fonctionne - alors voilà doit être quelque chose de différent dans votre code que vous ne nous avez pas dit