嘿伙计我是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条件通过输入也没有获得焦点。为什么?
谢谢。
答案 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.