2014-08-27 2 views
0

Можно ли указать, сколько раз нажата кнопка отправки формы с помощью jQuery?Подсчитайте, сколько раз нажата кнопка, не используя глобальную переменную

Я нашел несколько ответов here, но я не хочу использовать глобальную переменную.

Есть ли способ достичь этого без использования глобальной переменной в jQuery?

<form id="form"> 
    <input type="button" id="Submit" name="Submit" value="Submit" /> 
</form> 

JavaScript:

var count = 0; 
$(document).ready(function(){ 
    $("form#Submit").submit(function(){ 
      count++; 
     }); 
}); 

только для примера -> Я хочу, чтобы позволить пользователю нажать кнопку 4 раза, но если он нажать более чем в 4 раза я покажу некоторые предупредительное сообщение

+0

шаг счетчик вар = 0; в анонимную функцию. – Pinoniq

+0

Я так не думаю, потому что во всех случаях вам нужно использовать переменную, чтобы сохранить количество нажатий кнопки. –

+0

все дело в области;) – Pinoniq

ответ

2

так это изменить на ответ, чтобы помочь вам по

$(document).ready(function() { 
    $("form#Submit").submit(function() { 
     var count = $(this).data("count") || 0; 
     if(count >= x) 
     { 
      //user clicked more than you wanted to so do something here 
     } 

     $(this).data("count", ++count); 
    }); 
}); 
3

Вы можете хранить счетчик в кнопки он data:

$(document).ready(function() { 
     $("form#Submit").submit(function() { 
      var count = $(this).data("count") || 0; 
      $(this).data("count", ++count); 
     }); 
    }); 
+0

, так что, если я хочу, чтобы пользователь не нажал эту кнопку несколько раз, например, 4 раза пользователь может нажать кнопку !!! ..... так что вы можете изменить выше код, чтобы позволить пользователю только щелкнуть 4 раза – Hitesh

+0

@hitesh: все, что вам нужно сделать, это захватить $ (this) .date ('count'), передать его как int и добавить блок if. вы должны попробовать это самостоятельно, без дословного ответа. – workabyte

+0

@ workabyte - Спасибо :) Можете ли вы PLS изменить свой код, как вы объяснили! так что я могу понять лучше! – Hitesh

0

Изначально добавьте идентификатор к вашей кнопке как 'clicked-0'. Теперь сделайте это, как показано ниже:

$(document).ready(function(){ 
    $("form#Submit").submit(function(){ 
     var clicks = $(this).attr('id').replace('clicked-',''); 
     clicks = clicks+1; 
     alert("No. of times clicked:"+clicks); 
     $(this).attr('id','clicked-'+clicks); 
    }); 
}); 
0
$(document).ready(function(){ 
    var count = 0; 
    $("form#Submit").submit(function(){ 
     count++; 
     console.log(count); //for instance 
    }); 
}); 

Количество определяется в анонимной функции, которая выполняется на domready. Таким образом, он доступен только внутри этой aonymous функции (и, конечно, чтобы все внутри него, например, функции представить)

EDIT

Вы можете проверить, что это не в глобальном масштабе:

$(document).ready(function(){ 
    var count = 0; 
    $("form#Submit").submit(function(){ 
     count++; 
     console.log(count); //for instance 
     console.log(window.count); //undefined 
    }); 
}); 
+0

, но оно по-прежнему является глобальной переменной – Hitesh

+0

euhm. noo ... Может быть, определить 'global' – Pinoniq

1

JavaScript

function CountOnFormSubmitEvent(form_id, _callback_) 
{ 
    var that = this, count = 0, callback = _callback_; 

    var form = document.getElementById(form_id); 
    if(form === null) { return null; } 

    var reset = function(){ 
     count = 0; 
    }; 

    form.addEventListener("submit", function(evt){ 
     callback(evt, ++count, reset); 
    }, false); 
} 

var counter = new CountOnFormSubmitEvent("myForm", function(event, count, reset_callback){ 
    event.preventDefault(); 
    if(count >= 4) 
    { 
     alert("Too many clicks !"); 
     reset_callback(); 
    } 
}); 

http://jsfiddle.net/3snmg7bt/

Я надеюсь, что это поможет;)

+1

спасибо за ссылку jsfiddle и чистый JS-код ...это хорошо – Hitesh

Смежные вопросы