Declarando variable estática en jquery

Amablemente me guía con respecto a la declaración de la variable estática en el siguiente programa. Quiero incrementar el valor de la variable estática lists.counter con un clic de botón. Pero no está funcionando.

 <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="finalspecific2_list._Default" %>


   
    <script src="Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>
    <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>

<script type="text/javascript">

    $(document).ready(function lists() {

        var list = $('#myList li:gt(0)');


        list.hide();
        lists.counter = 0;
        var username = $("#<%= uname.ClientID %>").val();
        var pwd = $("#<%= pwd.ClientID %>").val();


        $("#<%= Login.ClientID %>").click(function() {


            lists.counter++;


            alert(lists.counter);
            lists.counter++;


        });




        $("#<%= Button1.ClientID %>").click(function() {

            {

                    alert(lists.counter);



                    }




                });
    });



  </script>





















lists.counter debe aumentar cuando se hace clic en cualquiera de los botones y debe aumentarse para los siguientes clics. Amablemente guía en este asunto.

1
Debería funcionar como lo tiene: jsbin.com/ebesad Tenga en cuenta que está creando una propiedad en el lista la función , que es válida pero no necesaria para lo que estás haciendo.
agregado el autor T.J. Crowder, fuente
En cada actualización, el contador no se incrementará con seguridad.
agregado el autor Umesh Patil, fuente

3 Respuestas

Puedes usar un cierre aquí:

$(document).ready(function() {
   //The actual counter is contained in the counter closure.
   //You can create new independent counters by simply assigning 
   //the function to a new variable
    function makeCounter() {
        var count = 0;
        return function() {
            count++;
            return count;
        };
    };

   //This variable contains a counter instance
   //The counter is shared among all calls regardless of the caller
    var counter = makeCounter();

   //The handler is bound to multiple buttons separated by commas
    $("#button, #another_button, #yet_another_button").click(function() {
       var i = counter();
       console.log("The counter now is at " + i);

      //Probably update your counter element
      //$("#counter").text(i);
    });
});​

Puede encontrar el código en este violín.

Si le interesa, puede leer más acerca de los cierres aquí .

Update: This fiddle uses multiple buttons sharing the same counter.

5
agregado
Querido Sammy, gracias por tu ayuda. Pero mi código tiene diferentes requisitos. Hay dos funciones de clic en el código que usan la misma variable y esta variable debería aumentar si se presiona cualquier botón. Ese es el alcance de la variable debe estar en ambas funciones y no se limita a ninguna función.
agregado el autor user1458312, fuente
De hecho, entonces mi enfoque es perfecto para tus necesidades :). El efecto del cierre es que captura el valor del contador sobre cualquier cantidad de invocaciones. Cada vez que llamas a counter() , obtienes un valor incrementado de counter independientemente de la función de la persona que llama. Actualizaré el violín en consecuencia para que pueda tener otro aspecto :)
agregado el autor Sammy S., fuente

Reemplace lists.Counter con this.Counter y compruebe si funciona

o prueba esto -

<input id="button" type="button" value="button" />

var counter = 0;

$("#button").click(function() {
   console.log(counter++);
});

Demo: http://jsfiddle.net/AxD7c/

0
agregado
Lo que tiene debe funcionar, esto simplemente lo convierte en un var en lugar de una propiedad de la función.
agregado el autor T.J. Crowder, fuente
Estimado Dipaks, Amablemente sugiera la solución para la pregunta modificada.
agregado el autor user1458312, fuente
$ (document) .ready (function() {var count = 1; $ ('# button'). click (function() {$ ('# counter'). text (count ++);});});
agregado el autor ShivarajRH, fuente

While declaring variables in JQuery, please don't use DOT in between, instead you can use camel format to differentiate two words, so list.counter should be listCounter

Código cambiado:

$(document).ready(function lists() {

    listsCounter = 0;

    $("#<%= Login.ClientID %>").click(function() {

        listsCounter++;

    });

});
0
agregado
Estimado Subhajit, gracias por su ayuda pero en nuestro código hay una variable común a dos funciones y esta variable debe aumentar en ambas funciones, en resumen hay un requisito de variable estática si es posible, amablemente guía con respecto a declarar variable estática que satisfaga los requisitos de nuestro código. ¡¡¡¡¡Gracias!!!!!
agregado el autor user1458312, fuente