5

当表单元素获得焦点时,我试图隐藏页脚。我还想在表单元素失去焦点时显示页脚,模糊事件应该处理。我无法在 jQuery Mobile 选择菜单表单元素上触发焦点或模糊事件。

这是我的表单元素之一的示例-

<select id="radiology-study-provider" class="selectList"></select>

这是应该将我的页脚隐藏在焦点上并在模糊上显示它的 jQuery 代码(它在 DOM 内部准备好) -

  $('.selectList').change(function(){
      console.log("the change event is firing");
  });
  $('.selectList').focus(function(){
      $('div:jqmData(role="footer")').hide(); // hide the footer
  });
  $('.selectList').blur(function(){
      $('div:jqmData(role="footer")').show(); // show the footer
  });

奇怪的是,更改事件处理程序会触发,但焦点和模糊不会。

我已经在下面尝试过,但它不起作用 -

  $('.selectList').on('focus', function(){
      $('div:jqmData(role="footer")').hide(); // hide the footer
  });
  $('.selectList').on('blur', function(){
      $('div:jqmData(role="footer")').show(); // show the footer
  });

我也试过这个 -

   $('.selectList').bind( "focus", function(event, ui) {
       $('div:jqmData(role="footer")').hide(); // hide the footer
  });
   $('.selectList').bind( "blur", function(event, ui) {
       $('div:jqmData(role="footer")').hide(); // hide the footer
  });

我也尝试了 focusin() 和 focusout() 事件,但也没有成功。我尝试了几十个选择器(div.ui-select 就是其中之一)。我不认为这是我使用的选择器的问题。

我正在使用 jQuery Mobile 1.1.0 和 jQuery 1.7.1 - 我在http://jquerymobile.com/test/docs/forms/selects/events.html检查了 jQuery Mobile 选择菜单文档,与谷歌交谈,在这里搜索,并且找不到这个问题。

4

3 回答 3

4

这就是最终为我工作的原因。

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady () {
    document.addEventListener("hidekeyboard", onKeyboardHide, false);
    document.addEventListener("showkeyboard", onKeyboardShow, false);

}

function onKeyboardHide() {
    $('div:jqmData(role="footer")').show(); // show the footer
}

function onKeyboardShow() {
    $('div:jqmData(role="footer")').hide(); // hide the footer
}

我在堆栈上遇到了这个 -显示隐藏键盘在 android phonegap 中无法正常工作,并注意到您可以收听这 2 个事件。

于 2012-09-21T17:16:27.087 回答
1

尝试注释掉焦点事件并尝试..有时当焦点事件触发时,它会被触发多次,因此您看不到执行的代码......

$('.selectList').change(function(){
      alert("the change event is firing");
  });

 // $('.selectList').focus(function(){
 //    $('div:jqmData(role="footer")').hide(); // hide the footer
 //    alert("Focus event is firing");
 // });

  $('.selectList').blur(function(){
      //$('div:jqmData(role="footer")').show(); // show the footer
      alert("Blur event is firing");
  });​

我注释掉了焦点事件,其他两个事件似乎被触发了。删除评论,你会看到焦点事件被多次触发。

检查小提琴

于 2012-09-21T06:01:21.477 回答
1

使用以下示例对我有用:

JS:

<script>
    document.addEventListener("deviceready", function(){}, false);

    $(function() {
        $('.selectList').change(function(){
            console.log("the change event is firing");                                      
        });

        $('.selectList').focus(function(){
            console.log("FOCUS");
            $('#my_footer').hide(); // hide the footer
        });

        $('.selectList').focusout(function(){
            console.log("FOCUS OUT");
            $('#my_footer').show(); // show the footer
        });
    });
</script>

#my_footer我的页脚的 id 在哪里(检查下面的 HTML)。

HTML:

<body>
    <div data-role="page">
        <div data-role="content">

            <select id="radiology-study-provider" class="selectList">
                <option value="1">A</option>
                <option value="2">B</option>
                <option value="3">C</option> 
            </select>

        </div>
    </div>
</body>

你可以试试这个例子,看看这是否对你有用:S

希望这可以帮助。让我知道你的结果。

于 2012-09-21T07:48:12.600 回答