diff --git a/public_html/media/js/comment-edit.js b/public_html/media/js/comment-edit.js
index 95a5b8c2..b0844f9f 100644
--- a/public_html/media/js/comment-edit.js
+++ b/public_html/media/js/comment-edit.js
@@ -3,15 +3,13 @@ $(function()
function onDomUpdate()
{
$('form.edit-comment textarea, form.add-comment textarea')
- .off('change keyp')
- .on('change keyup', function(e)
- {
- enableExitConfirmation();
- });
+ .bindOnce('exit-confirmation', 'change keyp', function(e)
+ {
+ enableExitConfirmation();
+ });
$('form.edit-comment, form.add-comment')
- .off('submit')
- .on('submit', function(e)
+ .bindOnce('comment-submit', 'submit', function(e)
{
e.preventDefault();
rememberLastSearchQuery();
@@ -96,7 +94,7 @@ $(function()
$.ajax(ajaxData);
});
- $('.comment .edit a').off('click').on('click').click(function(e)
+ $('.comment .edit a').bindOnce('edit-comment', 'click', function(e)
{
e.preventDefault();
var commentDom = $(this).parents('.comment');
diff --git a/public_html/media/js/core.js b/public_html/media/js/core.js
index 62bb2507..cacd6b39 100644
--- a/public_html/media/js/core.js
+++ b/public_html/media/js/core.js
@@ -37,6 +37,17 @@ $.fn.hasAttr = function(name)
return this.attr(name) !== undefined;
};
+$.fn.bindOnce = function(name, eventName, callback)
+{
+ $.each(this, function(i, item)
+ {
+ if ($(item).data(name) == name)
+ return;
+ $(item).data(name, name);
+ $(item).on(eventName, callback);
+ });
+};
+
//safety trigger
@@ -82,14 +93,14 @@ $(function()
}
}
- $('form.confirmable').submit(confirmEvent);
- $('a.confirmable').click(confirmEvent);
+ $('form.confirmable').bindOnce('confirmation', 'submit', confirmEvent);
+ $('a.confirmable').bindOnce('confirmation', 'click', confirmEvent);
//simple action buttons
- $('a.simple-action').click(function(e)
+ $('a.simple-action').bindOnce('simple-action', 'click', function(e)
{
- if(e.isPropagationStopped())
+ if (e.isPropagationStopped())
return;
e.preventDefault();
@@ -124,7 +135,7 @@ $(function()
//attach data from submit buttons to forms before .submit() gets called
$('.submit').each(function()
{
- $(this).click(function()
+ $(this).bindOnce('submit-faux-input', 'click', function()
{
var form = $(this).closest('form');
form.find('.faux-submit').remove();
diff --git a/public_html/media/js/post-list.js b/public_html/media/js/post-list.js
index 885588bb..300efd7c 100644
--- a/public_html/media/js/post-list.js
+++ b/public_html/media/js/post-list.js
@@ -2,13 +2,9 @@ $(function()
{
$('body').bind('dom-update', function()
{
- $('.post a.toggle-tag').click(function(e)
+ $('.post a.toggle-tag').bindOnce('toggle-tag', 'click', function(e)
{
- if(e.isPropagationStopped())
- return;
-
e.preventDefault();
- e.stopPropagation();
var aDom = $(this);
if (aDom.hasClass('inactive'))
diff --git a/public_html/media/js/post-view.js b/public_html/media/js/post-view.js
index 32a1df78..ad077643 100644
--- a/public_html/media/js/post-view.js
+++ b/public_html/media/js/post-view.js
@@ -2,7 +2,7 @@ $(function()
{
function onDomUpdate()
{
- $('#sidebar a.edit-post').click(function(e)
+ $('#sidebar a.edit-post').bindOnce('edit-post', 'click', function(e)
{
e.preventDefault();