2010-03-25 4 views
50

Je suis en train d'appeler une fonction définie par l'utilisateur dans jQuery:Appel d'une fonction définie par l'utilisateur dans jQuery

$(document).ready(function() { 
 
    $('#btnSun').click(function() { 
 
    myFunction(); 
 
    }); 
 
    $.fn.myFunction = function() { 
 
    alert('hi'); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="btnSun">Say hello!</button>

J'ai essayé les éléments suivants ainsi:

$(document).ready(function() { 
 
    $('#btnSun').click(function() { 
 
    myFunction(); 
 
    }); 
 
}); 
 

 
function myFunction() { 
 
    alert('hi'); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="btnSun">Say hello!</button>

Cela ne semble pas fonctionner! Une idée où je me trompe?

+1

Je définirais cela comme un ** plugin ** –

+1

juste une remarque, puisque vous utilisez $ .fn.myFunction, dans la plupart des cas, vous dites que vous voulez utiliser cette fonction sur un objet jquery enveloppé valide, par ex. '$ ('your_html_tag'). myFonction()'. http://jsfiddle.net/H7z8f/ –

Répondre

61

Si vous voulez appeler une fonction normale via un événement jQuery, vous pouvez le faire comme ceci:

$(document).ready(function() { 
 
    $('#btnSun').click(myFunction); 
 
}); 
 

 
function myFunction() { 
 
    alert('hi'); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="btnSun">Say hello!</button>

+1

Si vous avez besoin d'une fonction personnalisée pour un objet (par exemple une variable), vous pouvez utiliser 'Object.prototype.SayIt = fonction (s) {return this + s;}; var ramone = 'Hey Ho,'; var s = 'Laisse aller'; console.log (ramone.SayIt (s)); '. Si vous avez des problèmes, utilisez 'Object.defineProperty (Object.prototype," SayIt ", {value: function (s) {vos trucs ici}});' –

+4

@Nick Craver pouvez-vous ajouter des paramètres à l'utilisateur définir la fonction si oui l'utiliseriez-vous {function myFunction (val1, val2) { // comment l'utiliseriez-vous ici }} et comment appelleriez-vous la fonction ... merci – Amjad

+0

Cela n'a pas fonctionné pour moi. Celui de Ruslan López Carro a fonctionné (ci-dessous.) – alikuli

6

Essayez cette $('div').myFunction();

Cela devrait fonctionner

$(document).ready(function() { 
$('#btnSun').click(function(){ 
    myFunction(); 
}); 

function myFunction() 
{ 
alert('hi'); 
} 
+0

Est-ce que cela signifie que nous ne pouvons pas créer de fonction définie par l'utilisateur dans Jquery et appeler comme d'habitude? – user269867

+0

Hey ça marche pour moi $ ('div'). MyFunction(); :-). Super !! Pouvez-vous m'aider à comprendre ce comportement? pourquoi nous avons besoin de $ ('div'). myFunction() ... pourquoi je ne peux pas appeler myFunction comme fonction normale? – user269867

+0

Vous l'assignez à l'objet jQuery. –

11

Ils sont appelés plugins , comme commenté Jaboc. Pour avoir du sens, la fonction plugin devrait faire quelque chose avec l'élément auquel elle est appelée. Considérez ce qui suit:

jQuery.fn.make_me_red = function() { 
    return this.each(function() { 
     this.style.color = 'red'; 
    }); 
}; 

$('a').make_me_red(); 
3
jQuery.fn.make_me_red = function() { 
    return this.each(function() { 
     this.style.color = 'red'; 
    }); 
}; 

$('a').make_me_red() // - instead of this you can use $(this).make_me_red() instead for better readability. 
28

Juste essayer . Cela fonctionne toujours.

$(document).ready(function() { 
 
    $('#btnSun').click(function() { 
 
    $.fn.myFunction(); 
 
    }); 
 
    $.fn.myFunction = function() { 
 
    alert('hi'); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="btnSun">Say hello!</button>

+0

J'essayais de perdre mon temps dans quelque chose de stupide. J'ai essayé chaque code qui est mentionné ici mais j'étais incapable de même 'alert (0);' il. J'essayais de trouver une solution et voilà, j'ai appuyé sur 'F12' et il semble que mon ** AdBlocker ** bloquait le contenu. Lire la suite: [** Impossible de charger la ressource dans chrome google.maps api **] (http://stackoverflow.com/a/34625042/5737774) – fWd82

8

Ce qui suit est la bonne méthode

$(document).ready(function() { 
    $('#btnSun').click(function(){ 
     $(this).myFunction(); 
    }); 
    $.fn.myFunction = function() { 
     alert('hi'); 
    } 
}); 
0
jQuery.fn.make_me_red = function() { 
    alert($(this).attr('id')); 
    $(this).siblings("#hello").toggle(); 
} 
$("#user_button").click(function(){ 
    //$(this).siblings(".hello").make_me_red(); 
    $(this).make_me_red(); 
    $(this).addClass("active"); 
}); 
​ 

déclaration de fonction et de rappel en jQuery.

0
$(document).ready(function() { 
    $('#btnSun').click(function(){ 

     myFunction(); 

    }); 

    $.fn.myFunction = function() { 
    alert('hi'); 

    }; 
}); 

Put '; 'après la définition de la fonction ...

Questions connexes