Jquery 脚本在表单填写中阻止键盘输入
Jquery Script Blocking Keyboard Input in Form Fill
早些时候,我正在测试我正在进行的项目的在线表单,发现我实际上无法在任何表单字段中键入任何内容。我把它缩小到一个特定的脚本。我认为正是代码中的这一点导致了问题,因为当我删除它时,我可以再次输入。
$(document).on('keypress', handleEvent);
但对于我的生活,我不知道为什么会这样,我也不确定如何解决它。如果您能帮助指出问题所在以及如何解决此问题,我们将不胜感激。
jQuery(document).ready(function($) {
function handleEvent(e){
var id = null;
var fade_out;
var fade_in;
if (e.type === 'click'){
id = $(this).attr("id");
}else{
id = e.which;
}
switch (id){
case 13:
if ($('#click_1').is(':visible')){
fade_out = '#start_1';
fade_in = '#step_0';
}
break;
..etc..
default:
break;
}
$(fade_out).fadeTo( 'fast', 0 );
$(fade_in).delay( 800 )..fadeTo( 'slow', 1 );
e.preventDefault();
}
$('#ts_container').on('click', 'button, a', handleEvent);
$(document).on('keypress', handleEvent);
});
更新
我找到了修复它的方法。但是,仍然不知道为什么会这样。
替换:
$(document).on('keypress', handleEvent);
有:
if ($(document).keydown(function(e){
if ($('#service_form').is(':hidden')){
$(document).on('keyup', handleEvent);
}
}));
即使在第一次修改代码之后,我也开始意识到它不仅阻止了表单填写,还阻止了其他所有未分配的内容。在最初临时修复它之后,我发现不仅按键被阻止,而且未分配的按钮和锚点也被阻止。我需要一种方法来打开和关闭那段代码。这是我在这里遇到 BenG 从 2015 年开始提供的解决方案的地方:.
使用他的代码和对现有代码的一些修改,下面的代码解决了未分配的点击和键盘输入被拒绝的问题。
改变了这个:
//any unassigned clicks / buttons would not work with this code.
$('#ts_container').on('click', 'button, a', handleEvent);
// any unassigned keypress events would not work with this code.
$(document).on('keypress', handleEvent);
为此:
jQuery(document).ready(function($) {
$.fn.disableClick = function (disable){
this.each(function() {
if(disable){
if(this.onclick)
$(this).data('onclick', this.onclick).removeAttr('onclick');
if($._data(this, 'events') && $._data(this, 'events').click)
$(this).data('click', $.extend(true, {}, $._data(this, 'events').click)).off('click');
}
else{
if($(this).data('onclick'))
this.onclick = $(this).data('onclick');
if($(this).data('click'))
for(var i in $(this).data('click'))
$(this).on('click', $(this).data('click')[i].handler);
}
});
return this;
};
function handleEvent(e){
var id = null;
var fade_out;
var fade_in;
if (e.type === 'click'){
id = $(this).attr("id");
}else{
id = e.which;
}
switch (id){
case 13:
if ($('#click_1').is(':visible')){
fade_out = '#start_1';
fade_in = '#step_0';
}
break;
..etc..
default:
break;
}
if($('#service_form').is(':visible')){
$('#ts_container').disableClick(false);
document.removeEventListener('keydown', handleEvent);
}
e.preventDefault();
}
$('#ts_container').on('click', 'button, a', handleEvent);
document.addEventListener('keydown', handleEvent);
function resetListeners(){
$('#ts_container').disableClick(true);
document.addEventListener('keydown', handleEvent);
}
$('#wpforms-submit-531').on('click', resetListeners);
});
早些时候,我正在测试我正在进行的项目的在线表单,发现我实际上无法在任何表单字段中键入任何内容。我把它缩小到一个特定的脚本。我认为正是代码中的这一点导致了问题,因为当我删除它时,我可以再次输入。
$(document).on('keypress', handleEvent);
但对于我的生活,我不知道为什么会这样,我也不确定如何解决它。如果您能帮助指出问题所在以及如何解决此问题,我们将不胜感激。
jQuery(document).ready(function($) {
function handleEvent(e){
var id = null;
var fade_out;
var fade_in;
if (e.type === 'click'){
id = $(this).attr("id");
}else{
id = e.which;
}
switch (id){
case 13:
if ($('#click_1').is(':visible')){
fade_out = '#start_1';
fade_in = '#step_0';
}
break;
..etc..
default:
break;
}
$(fade_out).fadeTo( 'fast', 0 );
$(fade_in).delay( 800 )..fadeTo( 'slow', 1 );
e.preventDefault();
}
$('#ts_container').on('click', 'button, a', handleEvent);
$(document).on('keypress', handleEvent);
});
更新
我找到了修复它的方法。但是,仍然不知道为什么会这样。
替换:
$(document).on('keypress', handleEvent);
有:
if ($(document).keydown(function(e){
if ($('#service_form').is(':hidden')){
$(document).on('keyup', handleEvent);
}
}));
即使在第一次修改代码之后,我也开始意识到它不仅阻止了表单填写,还阻止了其他所有未分配的内容。在最初临时修复它之后,我发现不仅按键被阻止,而且未分配的按钮和锚点也被阻止。我需要一种方法来打开和关闭那段代码。这是我在这里遇到 BenG 从 2015 年开始提供的解决方案的地方:
使用他的代码和对现有代码的一些修改,下面的代码解决了未分配的点击和键盘输入被拒绝的问题。
改变了这个:
//any unassigned clicks / buttons would not work with this code.
$('#ts_container').on('click', 'button, a', handleEvent);
// any unassigned keypress events would not work with this code.
$(document).on('keypress', handleEvent);
为此:
jQuery(document).ready(function($) {
$.fn.disableClick = function (disable){
this.each(function() {
if(disable){
if(this.onclick)
$(this).data('onclick', this.onclick).removeAttr('onclick');
if($._data(this, 'events') && $._data(this, 'events').click)
$(this).data('click', $.extend(true, {}, $._data(this, 'events').click)).off('click');
}
else{
if($(this).data('onclick'))
this.onclick = $(this).data('onclick');
if($(this).data('click'))
for(var i in $(this).data('click'))
$(this).on('click', $(this).data('click')[i].handler);
}
});
return this;
};
function handleEvent(e){
var id = null;
var fade_out;
var fade_in;
if (e.type === 'click'){
id = $(this).attr("id");
}else{
id = e.which;
}
switch (id){
case 13:
if ($('#click_1').is(':visible')){
fade_out = '#start_1';
fade_in = '#step_0';
}
break;
..etc..
default:
break;
}
if($('#service_form').is(':visible')){
$('#ts_container').disableClick(false);
document.removeEventListener('keydown', handleEvent);
}
e.preventDefault();
}
$('#ts_container').on('click', 'button, a', handleEvent);
document.addEventListener('keydown', handleEvent);
function resetListeners(){
$('#ts_container').disableClick(true);
document.addEventListener('keydown', handleEvent);
}
$('#wpforms-submit-531').on('click', resetListeners);
});