2010-03-25 19 views
50

Sto cercando di chiamare una funzione definita dall'utente in jQuery:Chiamata di una funzione definita dall'utente in 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>

Ho provato quanto segue così:

$(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>

Non sembra funzionare! Qualche idea su dove mi sbaglio?

+1

Definirei questo come un ** plug-in ** –

+1

solo un'osservazione, poiché si utilizza $ .fn.myFunction, nella maggior parte dei casi si dice che si desidera utilizzare questa funzione un oggetto jquery avvolto valido, ad es. '$ ('Your_html_tag'). MyFunction()'. http://jsfiddle.net/H7z8f/ –

risposta

61

Se si desidera chiamare una funzione normale tramite un evento jQuery, si può fare in questo modo:

$(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

Se hai bisogno di una funzione personalizzata per un oggetto (ad esempio una variabile), puoi usare 'Object.prototype.SayIt = function (s) {return this + s;}; var ramone = 'Hey Ho,'; var s = 'Lascia andare'; console.log (ramone.SayIt (s)); '. Se hai problemi, usa 'Object.defineProperty (Object.prototype," SayIt ", {value: function (s) {i tuoi contenuti qui}});' –

+4

@Nick Craver puoi aggiungere parametri alla funzione define dell'utente se sì come vorresti usarlo {function myFunction (val1, val2) { // come lo useresti qui }} e come chiameresti la funzione ... grazie – Amjad

+0

Questo non ha funzionato per me. Quello di Ruslan López Carro ha funzionato (è qui sotto) – alikuli

6

Prova questa $('div').myFunction();

Questo dovrebbe funzionare

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

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

Significa che non possiamo creare una funzione definita dall'utente in Jquery e chiamare come facciamo normalmente? – user269867

+0

Hey funziona per me $ ('div'). MyFunction(); :-). Grande !! Puoi aiutarmi a capire questo comportamento ?? perché abbiamo bisogno di $ ('div'). myFunction() ... perché non posso chiamare myFunction come una funzione normale? – user269867

+0

Lo stai assingendo all'oggetto jQuery. –

11

Essi sono chiamati plugin, come ha commentato Jaboc. Per avere un senso, la funzione plugin dovrebbe fare qualcosa con l'elemento attraverso il quale è chiamata. Si consideri il seguente:

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

Basta provare questo . Funziona sempre.

$(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

Stavo cercando di sprecare il mio tempo in una cosa stupida. Ho provato ogni codice che è menzionato qui, ma non è stato in grado di nemmeno "alert (0);" it. Stavo cercando di capire una soluzione ed eccolo qui, ho premuto 'F12' e sembra che il mio ** AdBlocker ** stia bloccando alcuni contenuti dalla visualizzazione. Ulteriori informazioni: [** Impossibile caricare la risorsa in chrome google.maps api **] (http://stackoverflow.com/a/34625042/5737774) – fWd82

8

Quello che segue è il metodo giusto

$(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"); 
}); 
​ 

dichiarazione Funzione e richiamata in jQuery.

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

     myFunction(); 

    }); 

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

    }; 
}); 

Put '; 'dopo la definizione della funzione ...

Problemi correlati