使用 If 语句切换大小写 - Javascript & Jquery
Switch Case with If Statements - Javascript & Jquery
这段代码有什么问题?它应该捕获 #ts_container div 内的所有点击,这些点击要么是按钮,要么是锚点。它还应该捕获按键事件。
我试图在每个案例中应用一个 If 语句来确定是否按键和/或单击,如果是,它将新的 div 名称重写到 switch case 底部的表达式中,然后当前文本将淡出,新文本淡入。W/o 按键工作正常。正如现在所写的那样,当你点击它时它仍然可以正常工作,但我无法让它触发按键事件,我不确定我做错了什么。
jQuery(document).ready(function($) {
$('#ts_container').on('click keypress', 'button, a', function(e) {
var id = $(this).attr("id");
var fade_out;
var fade_in;
switch (id) {
case 'start':
if ((e.type === 'keypress' && e.which === 13) || (e.type == 'click')) {
fade_out = '#start_1';
fade_in = '#step_0';
}
break;
case 'AC':
if ((e.type === 'keypress' && e.which === 49 || e.which === 97) || (e.type == 'click')) {
fade_out = '#step_0';
fade_in = '#step_AC_1';
}
break;
case 'step_AC_Continue_1':
if ((e.type === 'keypress' && e.which === 13) ||
(e.type == 'click')) {
fade_out = '#step_AC_1';
fade_in = '#step_AC_2';
}
break;
case 'Step_0_Option_1':
if ((e.type === 'keypress' && e.which === 50 || e.which === 98) || (e.type == 'click')) {
fade_out = '#step_0';
fade_in = '#step_Heat_1';
}
break;
case 'step_AC_Option_1':
if ((e.type === 'keypress' && e.which === 49 || e.which === 97) || (e.type == 'click')) {
fade_out = '#step_AC_2';
fade_in = '#step_AC_3';
}
break;
case 'step_AC_Option_2':
if ((e.type === 'keypress' && e.which === 50 || e.which === 98) || (e.type == 'click')) {
fade_out = '#step_AC_2';
fade_in = '#step_AC_solution_electrical';
}
break;
case 'step_AC_Option_3':
if ((e.type === 'keypress' && e.which === 51 || e.which === 99) || (e.type == 'click')) {
fade_out = '#step_AC_2';
fade_in = '#step_AC_circuit_breaker';
}
default:
fade_out = '#start_1';
fade_in = '#step_0';
}
$(fade_out).fadeTo('fast', 0).css('visibility', 'hidden')
.css('display', 'none');
$(fade_in).delay(800).css('visibility', 'visible')
.css('display', 'block').fadeTo('slow', 1);
});
});
你在大多数 if
语句中的括号都不正确:
if ((e.type === 'keypress' && e.which === 49 || e.which === 97) || (e.type == 'click'))
if ((e.type === 'keypress' && e.which === 50 || e.which === 98) || (e.type == 'click'))
if ((e.type === 'keypress' && e.which === 49 || e.which === 97) || (e.type == 'click'))
if ((e.type === 'keypress' && e.which === 50 || e.which === 98) || (e.type == 'click'))
if ((e.type === 'keypress' && e.which === 51 || e.which === 99) || (e.type == 'click'))
&&
优先于 ||
,所以最终是:
if (((e.type === 'keypress' && e.which === x) || e.which === y) || (e.type == 'click'))
将它们更改为:
if (e.type === 'keypress' && (e.which === x || e.which === y) || e.type == 'click')
转换为:
- 它必须是代码
x
或 y
的 keypress
,或者
- 是点击事件。
您还在 button
和 a
元素上注册事件处理程序:
.on('click keypress', 'button, a'
这些通常不会监听键盘事件,除非您已经在关注它们。
解决方法是单独声明函数,并像这样注册处理程序:
function handleEvent(e) {
// Do stuf
}
$('#ts_container').on('click', 'button, a', handleEvent);
$(window).on('keypress', handleEvent);
这段代码有什么问题?它应该捕获 #ts_container div 内的所有点击,这些点击要么是按钮,要么是锚点。它还应该捕获按键事件。
我试图在每个案例中应用一个 If 语句来确定是否按键和/或单击,如果是,它将新的 div 名称重写到 switch case 底部的表达式中,然后当前文本将淡出,新文本淡入。W/o 按键工作正常。正如现在所写的那样,当你点击它时它仍然可以正常工作,但我无法让它触发按键事件,我不确定我做错了什么。
jQuery(document).ready(function($) {
$('#ts_container').on('click keypress', 'button, a', function(e) {
var id = $(this).attr("id");
var fade_out;
var fade_in;
switch (id) {
case 'start':
if ((e.type === 'keypress' && e.which === 13) || (e.type == 'click')) {
fade_out = '#start_1';
fade_in = '#step_0';
}
break;
case 'AC':
if ((e.type === 'keypress' && e.which === 49 || e.which === 97) || (e.type == 'click')) {
fade_out = '#step_0';
fade_in = '#step_AC_1';
}
break;
case 'step_AC_Continue_1':
if ((e.type === 'keypress' && e.which === 13) ||
(e.type == 'click')) {
fade_out = '#step_AC_1';
fade_in = '#step_AC_2';
}
break;
case 'Step_0_Option_1':
if ((e.type === 'keypress' && e.which === 50 || e.which === 98) || (e.type == 'click')) {
fade_out = '#step_0';
fade_in = '#step_Heat_1';
}
break;
case 'step_AC_Option_1':
if ((e.type === 'keypress' && e.which === 49 || e.which === 97) || (e.type == 'click')) {
fade_out = '#step_AC_2';
fade_in = '#step_AC_3';
}
break;
case 'step_AC_Option_2':
if ((e.type === 'keypress' && e.which === 50 || e.which === 98) || (e.type == 'click')) {
fade_out = '#step_AC_2';
fade_in = '#step_AC_solution_electrical';
}
break;
case 'step_AC_Option_3':
if ((e.type === 'keypress' && e.which === 51 || e.which === 99) || (e.type == 'click')) {
fade_out = '#step_AC_2';
fade_in = '#step_AC_circuit_breaker';
}
default:
fade_out = '#start_1';
fade_in = '#step_0';
}
$(fade_out).fadeTo('fast', 0).css('visibility', 'hidden')
.css('display', 'none');
$(fade_in).delay(800).css('visibility', 'visible')
.css('display', 'block').fadeTo('slow', 1);
});
});
你在大多数 if
语句中的括号都不正确:
if ((e.type === 'keypress' && e.which === 49 || e.which === 97) || (e.type == 'click'))
if ((e.type === 'keypress' && e.which === 50 || e.which === 98) || (e.type == 'click'))
if ((e.type === 'keypress' && e.which === 49 || e.which === 97) || (e.type == 'click'))
if ((e.type === 'keypress' && e.which === 50 || e.which === 98) || (e.type == 'click'))
if ((e.type === 'keypress' && e.which === 51 || e.which === 99) || (e.type == 'click'))
&&
优先于 ||
,所以最终是:
if (((e.type === 'keypress' && e.which === x) || e.which === y) || (e.type == 'click'))
将它们更改为:
if (e.type === 'keypress' && (e.which === x || e.which === y) || e.type == 'click')
转换为:
- 它必须是代码
x
或y
的keypress
,或者 - 是点击事件。
您还在 button
和 a
元素上注册事件处理程序:
.on('click keypress', 'button, a'
这些通常不会监听键盘事件,除非您已经在关注它们。
解决方法是单独声明函数,并像这样注册处理程序:
function handleEvent(e) {
// Do stuf
}
$('#ts_container').on('click', 'button, a', handleEvent);
$(window).on('keypress', handleEvent);