除了单击按钮外,如何触发jQuery中的模糊?

时间:2019-04-30 06:27:11

标签: javascript jquery jquery-mobile

我在jQuery mobile 1.4.5环境中包装了一个输入字段,该字段将向上滚动以在移动设备上提供搜索建议的空间。

enter image description here

填写该字段后,它将向下滚动。

$('#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>

我只想在未单击清除按钮时触发功能。该怎么办?

1 个答案:

答案 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
     }
 });