Вопрос или проблема
Используя OpenCart 2.3.0.2 на мобильном устройстве, я пытаюсь предотвратить закрытие клавиатуры, когда вводится текст в текстовое поле параметра. Мне удалось успешно использовать приведенный ниже код, чтобы переместить кнопку “Добавить в корзину” и параметры выше описания, но теперь, когда я пытаюсь ввести текст в текстовые поля параметров, моя клавиатура открывается и закрывается через секунду. Кто-нибудь знает, как это исправить?
`
<script>
$(function(){
// Создаем функцию
function moveCart(){
// Если ширина экрана пользователя меньше 768 пикселей
if($(window).width() < 768 ){
/*
выбираем область корзины, включая кнопку корзины, параметры, название продукта и ...
если вы хотите переместить только кнопку корзины, используйте '#product' вместо '#content > .row > .col-sm-4'
*/
$('#content > .row > .col-sm-4').removeClass('col-sm-4').addClass('moved-div');
// теперь перемещаем ее
$('.moved-div').insertAfter('.thumbnails');
} else {
/*
если пользователь изменил ширину экрана и теперь ширина экрана больше 767 пикселей, и мы переместили область корзины раньше, переместим ее на место.
*/
if($('.moved-div').length){
$('.moved-div').insertAfter('#content > .row > .col-sm-8').addClass('col-sm-4').removeClass('moved-div');
}
}
}
// запускаем функцию
moveCart();
$(window).resize(function(){
// запускаем функцию снова, если пользователь изменил размер экрана
moveCart();
})
});
</script>
Ответ или решение
Ваша проблема с тем, что клавиатура на мобильном устройстве открывается и закрывается сразу после введения текста, может быть связана с тем, что вы переместили элементы интерфейса (в данном случае кнопку "Добавить в корзину" и опции) после загрузки страницы. Это может вызывать переотрисовку элемента, что, в свою очередь, приводит к закрытию клавиатуры.
Для решения данной проблемы, я предлагаю следующие шаги:
-
Изменение подхода к перемещению элементов: Вместо перемещения элементов после доступа к полям ввода, попробуйте изменить порядок HTML-кода непосредственно в шаблонах OpenCart, чтобы обеспечить нужное расположение элементов изначально, без использования JavaScript.
-
Условный вывод скрипта: Если вам все же необходимо использовать JavaScript для манипуляций с элементами, попробуйте добавить обработчик события, который будет удерживать фокус на поле ввода. Это поможет избежать изменения фокуса и, как следствие, лишнего открытия и закрытия клавиатуры.
Вот как можно изменить ваш код:
<script>
$(function(){
function moveCart(){
if($(window).width() < 768 ){
$('#content > .row > .col-sm-4').removeClass('col-sm-4').addClass('moved-div');
$('.moved-div').insertAfter('.thumbnails');
} else {
if($('.moved-div').length){
$('.moved-div').insertAfter('#content > .row > .col-sm-8').addClass('col-sm-4').removeClass('moved-div');
}
}
}
function keepFocusOnInput(input) {
$(input).focus(); // Удерживаем фокус на поле ввода
}
// Запускаем функцию перемещения
moveCart();
$(window).resize(function(){
moveCart();
});
// Добавить обработчик для поля ввода
$(document).on('focus', 'input[type="text"], textarea', function() {
keepFocusOnInput(this);
});
});
</script>
-
Тестирование: После внесения изменений, тщательно протестируйте функциональность на различных мобильных устройствах и браузерах, чтобы убедиться, что проблема решена и пользовательский интерфейс работает корректно.
-
Оптимизация: Также рекомендуется проверить наличие других скриптов или CSS-правил, которые могут влиять на поведение клавиатуры и элементов управления. Попробуйте отключить их по одному, чтобы диагностировать потенциальные конфликтующие элементы.
Следуя указанным рекомендациям, вы сможете решить проблему с закрывающейся клавиатурой на мобильных устройствах и улучшить взаимодействие пользователей с вашим интернет-магазином на базе OpenCart.