#jquery #forms #api #scroll
#jquery #формы #API #прокрутите
Вопрос:
Я работаю над веб-сайтом, на котором реализованы некоторые скрипты jQuery. После создания нескольких простых форм я не смог отправить ни одну из них. Я нажимаю Отправить, и ничего не происходит. После долгой отладки я выяснил, что причиной этого является скрипт, который я включил.
Это библиотека с открытым исходным кодом: https://markgoodyear.com/2013/01/scrollup-jquery-plugin /.
Каждый раз, когда я комментирую этот скрипт, форма отправляется и работает должным образом. Как только я включаю его, форма ничего не делает.
Кто-нибудь знает, что может быть причиной этого?
Я включил код скрипта в jsfiddle: https://jsfiddle.net/ahje91r0/1 /
(function($, window, document) {
'use strict';
$.fn.scrollUp = function(options) {
if (!$.data(document.body, 'scrollUp')) {
$.data(document.body, 'scrollUp', true);
$.fn.scrollUp.init(options);
}
};
$.fn.scrollUp.init = function(options) {
var o = $.fn.scrollUp.settings = $.extend({}, $.fn.scrollUp.defaults, options),
triggerVisible = false,
animIn,
animOut, animSpeed, scrollDis, scrollEvent, scrollTarget, $self;
if (o.scrollTrigger) {
$self = $(o.scrollTrigger);
} else {
$self = $('<a/>', {
id: o.scrollName,
href: '#top'
});
}
if (o.scrollTitle) {
$self.attr('title', o.scrollTitle);
}
$self.appendTo('body');
if (!(o.scrollImg || o.scrollTrigger)) {
$self.html(o.scrollText);
}
$self.css({
display: 'none',
position: 'fixed',
zIndex: o.zIndex
});
if (o.activeOverlay) {
$('<div/>', {
id: o.scrollName '-active'
}).css({
position: 'absolute',
'top': o.scrollDistance 'px',
width: '100%',
borderTop: '1px dotted' o.activeOverlay,
zIndex: o.zIndex
}).appendTo('body');
}
switch (o.animation) {
case 'fade':
animIn = 'fadeIn';
animOut = 'fadeOut';
animSpeed = o.animationSpeed;
break;
case 'slide':
animIn = 'slideDown';
animOut = 'slideUp';
animSpeed = o.animationSpeed;
break;
default:
animIn = 'show';
animOut = 'hide';
animSpeed = 0;
}
if (o.scrollFrom === 'top') {
scrollDis = o.scrollDistance;
} else {
scrollDis = $(document).height() - $(window).height() - o.scrollDistance;
}
scrollEvent = $(window).scroll(function() {
if ($(window).scrollTop() > scrollDis) {
if (!triggerVisible) {
$self[animIn](animSpeed);
triggerVisible = true;
}
} else {
if (triggerVisible) {
$self[animOut](animSpeed);
triggerVisible = false;
}
}
});
if (o.scrollTarget) {
if (typeof o.scrollTarget === 'number') {
scrollTarget = o.scrollTarget;
} else if (typeof o.scrollTarget === 'string') {
scrollTarget = Math.floor($(o.scrollTarget).offset().top);
}
} else {
scrollTarget = 0;
}
$self.click(function(e) {
e.preventDefault();
$('html, body').animate({
scrollTop: scrollTarget
}, o.scrollSpeed, o.easingType);
});
};
$.fn.scrollUp.defaults = {
scrollName: 'scrollUp',
scrollDistance: 300,
scrollFrom: 'top',
scrollSpeed: 300,
easingType: 'linear',
animation: 'fade',
animationSpeed: 200,
scrollTrigger: false,
scrollTarget: false,
scrollText: 'Scroll to top',
scrollTitle: false,
scrollImg: false,
activeOverlay: false,
zIndex: 2147483647
};
$.fn.scrollUp.destroy = function(scrollEvent) {
$.removeData(document.body, 'scrollUp');
$('#' $.fn.scrollUp.settings.scrollName).remove();
$('#' $.fn.scrollUp.settings.scrollName '-active').remove();
if ($.fn.jquery.split('.')[1] >= 7) {
$(window).off('scroll', scrollEvent);
} else {
$(window).unbind('scroll', scrollEvent);
}
};
$.scrollUp = $.fn.scrollUp;
})(jQuery, window, document);
Комментарии:
1. Откройте консоль в браузере (нажмите F12), затем отправьте форму и проверьте, нет ли ошибок. Если вы видите некоторые, пожалуйста, отредактируйте вопрос, чтобы включить их
2. Также обратите внимание, что проблема, скорее всего, будет связана с использованием вами библиотеки выше, поскольку сама по себе в ее логике нет ошибок.
3. @RoryMcCrossan я сделал. К сожалению, ничего не происходит. Нет перезагрузки страницы, нет ошибок, это похоже на нажатие отключенной кнопки. Очень запутанно, поскольку, когда я удаляю скрипт, он работает правильно.
Ответ №1:
Похоже click
, что событие предотвращено этим плагином в строке # 100:
$self.click(function(e) {
e.preventDefault();
/...
Поэтому попробуйте остановить распространение события с кнопки отправки формы на плагин $self
, который, вероятно, является body
… Вот так:
$("form [type='submit']").on("click", function(e){
e.stopPropagation();
});
Комментарии:
1. Это сработало. Большое вам спасибо. Я добавил код, который вы написали. Также строка в app.js делал то же самое. Еще раз спасибо.