javascript jQuery操作符(':visible')不起作用

qxgroojn  于 2023-03-28  发布在  Java
关注(0)|答案(2)|浏览(179)

我是jQuery的新手,我在浏览modal.js代码时发现了下面的代码:

$target.one('show.bs.modal', function (showEvent) {
  if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
  $target.one('hidden.bs.modal', function () {
    $this.is(':visible') && $this.trigger('focus')
  })
})

我试着理解上面的代码,所以我made a Fiddle
现在,如果你在代码中看到if条件:

if ($this.is(':visible')) {
        $('input').trigger('focus');
        console.log($this + ' ' + 'is visible');

    } else {
        console.log($this + ' ' + 'invisible');
    }

现在,即使我有以下显示规则,即

input {
  display:none;
}

if条件仍然通过;这是我的第一个难题。为什么if条件通过了?
我的第二个困难是if条件中的一行,即

$this.trigger('focus');

现在,即使if条件通过了,输入也没有得到焦点,为什么?

mhd8tkvw

mhd8tkvw1#

我对你的代码做了一些小改动,现在看起来一切都对我有效:

$(document).ready(function () {
$target = $('input');
$target.trigger('focus');

$target.one('show.bs.modal', function (showEvent) {
    $this = $(this);

    console.log($this);

    if ($this.is(':visible')) {
        $this.focus();
    } else {
        console.log($this + ' ' + 'invisible');
    }

    $target.one('hidden.bs.modal', function () {
        $this.is(':visible') && $this.trigger('focus')
    });
});

$target.trigger('show.bs.modal');
});

http://jsfiddle.net/v36zoy1g/2/
要聚焦一个元素,你不需要花哨的代码。.focus()函数为你做了这项工作!实际上,我想这就是它,老实说,我不记得我改变的其他任何东西。:p

lvjbypge

lvjbypge2#

您尚未在$this上缓存$(this)
您可以用途:

$this = $(this) before you use $this in your code.

相关问题