我在jQuery mobile 1.4.5环境中包装了一个输入字段,该字段将向上滚动以在移动设备上提供搜索建议的空间。
填写该字段后,它将向下滚动。
$('#refn').on('blur',function(){
if ( (document.querySelector('.ui-input-clear-hidden') !== null) ) {
$("html, body").animate({ scrollTop: 0}, 200);
}
return false;
});
JQM将在右侧提供一个清晰的链接,该链接将清除文本字段。这是一个问题,因为单击它会散焦并触发向下滚动功能。导致上下滚动效果。
我试图通过识别类.ui-input-clear-hidden
来排除它,但这没有效果。我相信,因为它是一个链接,使关注点脱离了领域。
<a href="#" tabindex="-1" aria-hidden="true"
class="
ui-input-clear
ui-btn
ui-icon-delete
ui-btn-icon-notext
ui-corner-all"
title="Clear text">Clear text</a>
我只想在未单击清除按钮时触发功能。该怎么办?
答案 0 :(得分:0)
如果我理解,问题是当您单击明文按钮时,它会执行向下滚动的按钮?
我认为您可以尝试获得重点关注的元素,如果它是清除按钮,您什么也不做
$('#refn').on('blur',function(){
var focused_element = document.querySelector(':focus') ; //Get the focused element.
if ( focused_element.hasClass('.ui-input-clear-hidden') ) {
//It's the clear button
return false;
}else{
//It's not your clear button
$("html, body").animate({ scrollTop: 0}, 200);
}
});
编辑::尝试将clear_btn单击存储在变量中
//Function to force wait time
function timeout(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
var clear_btn_clicked = false;
//Event on click
$(document).on("click",function(){
//You clicked on the X btn
if( $(this).hasClass('ui-input-clear-hidden' ) ){
clear_btn_cliked = true;
}else{
clear_btn_clicked = false;
}
});
$('#refn').on('blur',function(){
await timeout(500); //Wait 0.5s to let JS do the clear_btn click event
if( clear_btn_clicked === false ){
$("html, body").animate({ scrollTop: 0}, 200); //You didn't click on the X
}else{
return false; //You clicked on the X
}
});
//You do same for your focus function
$('#refn').on('focus',function(){
await timeout(500); //Wait 0.5s to let JS do the clear_btn click event
if( clear_btn_clicked === false ){
//Scroll up
}else{
//Don't go up
}
});