उपयोग कर रहा हूँ मैं 4 4 के लिए विधि परिदृश्यों का उपयोग है कुछ के साथ अपने ब्लॉक के चारों ओर, सबसे पहले मेरी awnser यहाँ पसंद करते कृपया : Prevent double submits in a Rails AJAX form
केवल उन के लिए सीमा पर क्लिक करें:
उपयोग stopImmedia teprropagation और लक्ष्य डोम पर एक क्लिक घटना जोड़ें।
/**
* 防止按钮重复点击。
* NOTICE: #1 需要在作用点之前调用此方法 #2 stopImmediatePropagation 会阻止后面的所有事件包括事件冒泡
* @delay_duration 两次点击的间隔时间
*/
$.fn.preventMultipleClick = function (delay_duration) {
delay_duration = delay_duration || 3000;
var last_click_time_stamp = 0;
var time_duration = 0;
$(this).bind('click', function (event) {
time_duration = last_click_time_stamp ? event.timeStamp - last_click_time_stamp : 0;
//console.debug("preventMultipleClick", last_click_time_stamp, time_duration);
if (time_duration && time_duration < delay_duration) {
event.stopImmediatePropagation();
} else {
//console.debug("skip preventMultipleClick~");
last_click_time_stamp = event.timeStamp;
}
});
};
सीमा ऐसे ajax के रूप में प्रस्तुत:
उपयोग ajax के beforeSend attribut।
<%= f.submit "Save annotation", :disable_with => "Saving...", :class => "btn btn-primary", :id => "annotation-submit-button" %>
या: अक्षम:
/**
* 使用:
* 在jquery的ajax方法中加入参数:beforeSend
* 例如:beforeSend: function(){return $.preventMultipleAjax(event, 5000)}
*
* @param event
* @param delay_duration
* @returns {boolean}
*/
$.preventMultipleAjax = function (event, delay_duration) {
delay_duration = delay_duration || 3000;
var target = $(event.target);
var last_click_time_stamp = target.attr("_ajax_send_time_stamp") || 0;
var time_duration = last_click_time_stamp ? event.timeStamp - last_click_time_stamp : 0;
//console.debug("preventMultipleAjax", last_click_time_stamp, time_duration);
if (time_duration && time_duration < delay_duration) {
return false;
} else {
//console.debug("skip preventMultipleAjax~");
target.attr("_ajax_send_time_stamp", event.timeStamp);
return true;
}
};
केवल फार्म के लिए
仅仅 对 表单 元素, 按钮 等 起作用, 会 阻止 其 上 的 事件 触发
<input type="submit" value="submit" />
<input type="button" value="button" />
<input type="image" value="image" />
दूसरों:
यह मणि है: https://github.com/mlanett/redis-lock
Redis.current.lock("#{current_user.id}.action_name") do
# Some code
end
अरे, यह एक पुरानी पोस्ट है लेकिन वैसे भी जवाब के लिए धन्यवाद। मुझे वास्तव में रेडिस लॉकिंग के साथ इस दृष्टिकोण को पसंद है। –