是(':可见')不起作用

时间:2015-04-01 12:21:28

标签: javascript jquery

嘿伙计我是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')
  })
})

我试图理解上面的代码,所以我做了fiddle

现在,如果您在代码中看到if条件:

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

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

现在即使我有以下显示规则I.E。

input {
  display:none;
} 

if条件仍然过去,这就是我的第一个难度。为什么if条件通过?

我的第二个难度是if条件下的线。

$this.trigger('focus');

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

谢谢。

2 个答案:

答案 0 :(得分:1)

我为您的代码提供了一些小机会,现在这一切似乎对我有用:

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

答案 1 :(得分:0)

您尚未在$(this)上缓存$this

您可以使用:

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