Javascript $(文档)。就绪和窗口加载导致事件触发两次
我正在尝试修复rails 3.2.13应用程序中的一个bug,每当我准备好文档或调用了窗口onload时,某些单击事件就会触发两次。这似乎只有在我发出ajax调用后才会发生。如果我隐藏了提交,那么在不使用ajax调用的情况下添加代码。我能阻止它的唯一方法是从JS文件中删除准备好的文档,但是我需要它来让一些JQuery正常工作。我认为这可能是资产管道的问题,但不确定Javascript $(文档)。就绪和窗口加载导致事件触发两次,javascript,jquery,dom,ruby-on-rails-3.2,Javascript,Jquery,Dom,Ruby On Rails 3.2,我正在尝试修复rails 3.2.13应用程序中的一个bug,每当我准备好文档或调用了窗口onload时,某些单击事件就会触发两次。这似乎只有在我发出ajax调用后才会发生。如果我隐藏了提交,那么在不使用ajax调用的情况下添加代码。我能阻止它的唯一方法是从JS文件中删除准备好的文档,但是我需要它来让一些JQuery正常工作。我认为这可能是资产管道的问题,但不确定 $(document).ready(function () { $('.first_panel_photos').fadeIn('
$(document).ready(function () {
$('.first_panel_photos').fadeIn('slow');
var ajax;
var user_kits = [];
var photo_load_batch_html;
var kits_added = 0;
$.get('/get_kits', function (data) {
for (var i = 0; i < data.length; i++) {
photos = data[i].photos;
links = [];
for (var n = 0; n < photos.length; n++) {
link = data[i].photos[n].photo_url;
links.push(link);
}
user_kits.push(new Kit(data[i].kit_name, links));
kit_to_add = $('<button class="btn btn-info added_kit" id=' + (kits_added - 1) + '>Kit</button>');
$('.cart').append(kit_to_add.fadeIn());
update_total_price();
}
});
//Listeners
$('.first_panel_photos').on('click', 'img', function (event) {
event.stopPropagation();
add_to_kit(this.src);
if ($('.kit_photos_row_3').find('img').length === 3 && $('.buybtn').find('button').length === 0) {
$('.buybtn').append($('<button class="btn btn-info add_to_cart">Add to cart</button>').fadeIn());
$('.buybtn').append($('<input type="text" class="kit-name" placeholder="name the kit">').fadeIn());
}
});
$('.kit_photos_row_1, .kit_photos_row_2, .kit_photos_row_3').on('click', 'img', function (event) {
event.stopPropagation();
event.preventDefault();
remove_from_kit(this, function (img_row) {
if ($(img_row).hasClass('kit_photos_row_1')) {
shift_photo_from_class('.kit_photos_row_2', function () {
shift_photo_from_class('.kit_photos_row_3');
});
} else if ($(img_row).hasClass('kit_photos_row_2')) {
shift_photo_from_class('.kit_photos_row_3');
}
});
if ($('.add_to_cart').length !== 0) {
$('.add_to_cart').remove();
$('.kit-name').remove();
}
});
});
解决了两次触发事件的问题。我在浏览器中通过我的应用程序的缓存预编译版本查看页面。在使用rake assets:clean清理资产并在刷新页面时按住shift键后,JS开始正常工作。您已经包含了很多代码。你能挑出不适用于这个问题的代码吗?挑战代码格式和混淆变量名可以做到这一点。尝试将代码粘贴到一把小提琴中,也许反复单击TidyUp和JSHint,看看这是否有助于清除建议。所有人都欢呼spagetti怪物!谢谢@MarkSchultheiss,清理了一下,删除了额外的代码。JS新手,需要提高我的可读性!