2009-12-15 14 views
16

devo funzionejquery funzione di chiamata per nome

<script type="text/javascript"> 
    $(function() { 
     $("#search").click(function() { 
      var text = $("#searchText").val(); 
      $.getJSON("Search", { world: text, filter: text }, function(data) { 
       $("tr.DataRow").toggle(false); 
       for (i = 0; i < data.length; i++) { 
        $("#obj" + data[i]).toggle(true); 
       } 
      }); 
     })    
    }); 


</script> 

Ora ho un'altra funzione

<script type="text/javascript"> 

    $(function() { 
     $('#searchText').bind('keypress', function(e) { 
      if (e.keyCode == 13) { 

      } 
     }); 
    }); 
</script> 

come posso chiamare prima funzione dalla seconda funzione?

+13

@kusanagi Si considera corretta cortesia contrassegnare le risposte corrette alle domande come "accettate". Hai posto 11 domande, quindi sarà molto facile tornare indietro e accettare tutte le risposte corrette. Questo incoraggerà le persone a rispondere alle tue domande in modo completo e senza riserve. –

risposta

21

È possibile aumentare un evento click sull'elemento ti sei registrato la prima funzione

<script type="text/javascript"> 

    $(function() { 
     $('#searchText').bind('keypress', function(e) { 
      if (e.keyCode == 13) { 
       $('#search').click(); // Raise a click event on #search element 
      } 
     }); 
    }); 
</script> 
+1

+1 per la soluzione più semplice alla domanda posta. Bella risposta! –

1

potresti dargli un nome? mi sto perdendo qualcosa?

edit: per ottenere questo diritto

<script type="text/javascript"> 
function() myfunction{ 
    var text = $("#searchText").val(); 
    $.getJSON("Search", { world: text, filter: text }, function(data) { 
     $("tr.DataRow").toggle(false); 
     for (i = 0; i < data.length; i++) { 
      $("#obj" + data[i]).toggle(true); 
     } 
    }); 
} 

$(function(){ 
    $("#search").click(myfunction); 
}); 
</script> 

e poi

<script type="text/javascript"> 

$(function() { 
    $('#searchText').bind('keypress', function(e) { 
     if (e.keyCode == 13) { 
      myfunction(); 
     } 
    }); 
}); 
</script> 
+0

Non funzionerà. Quando istanziate una funzione come parte di un'espressione, dandogli un nome fornirà un modo per la funzione di chiamarsi in modo ricorsivo, ma non imposterà quel nome come attributo dell'oggetto finestra (o di qualsiasi altro oggetto). – Pointy

+0

@ RamboNo5 L'attivazione di 'myfunction()' è l'associazione eventi dell'elemento '# search', non l'azione click stessa. –

+0

Ok, grazie! Ho modificato il codice. Ora dovrebbe funzionare come previsto, giusto? La tua soluzione è molto più liscia, però :) – RamboNo5

12
// first function 
$(function() { 
    $.yourFavoriteFunctionName = function() { 
    // the code for the first function 
    }; 
    $.yourFavoriteFunctionName(); 
}); 

poi

// second function 
$(function() { 
    // whatever 
    if (foo) 
    $.yourFavoriteFunctionName(); 
20

estratto la logica del primo gestore di eventi in una funzione denominata:

function doSearch() { 
    var text = $("#searchText").val(); 
    $.getJSON("Search", { world: text, filter: text }, function(data) { 
     $("tr.DataRow").toggle(false); 
     for (i = 0; i < data.length; i++) { 
      $("#obj" + data[i]).toggle(true); 
     } 
    }); 
} 

Si può ora passare doSearch da nome al gestore clic:

$(function() { 
     $("#search").click(doSearch); 
    }); 

ed esplicitamente invocare dall'interno del gestore chiave:

$(function() { 
     $('#searchText').bind('keypress', function(e) { 
      if (e.keyCode == 13) { 
       doSearch(); 
      } 
     }); 
    }); 
+0

Questo è il modo corretto per andare – PetersenDidIt

+0

... eccetto che hai inquinato lo spazio dei nomi globale invece di estendere l'oggetto jQuery. – Pointy

+0

@Pointy - Se inizi a trattare l'oggetto jQuery come uno spazio dei nomi globale de facto, avrai gli stessi problemi di rendere globali tutte le tue variabili. Cosa succede quando scriviamo la funzione 'each()'? – harto

Problemi correlati