【发布时间】:2017-10-23 19:05:51
【问题描述】:
我必须根据某些元素的 ID 进行一系列检查,但它们都略有不同。
所以我做了一堆函数,而不是总是重复$(this).children ...,我想要一个简短的变量。但是当我在实际函数之外声明它时,我得到undefined。
代码不应该像这样工作吗:嗯,所以有一个使用 this 的变量,而现在 this 是一个 list ,那么我会变成$('ul').children ... 吗?
它遵循什么逻辑,我应该如何解决它?
问题的缩小示例:
$(document).ready(function() {
var thisID = $(this).attr('id');
function replaceContent(id) {
$('#' + id).html('new content, and the ID is: ' + thisID);
}
$('button').on('click', function() {
alert(thisID);
// replaceContent(thisID);
replaceContent(hello);
})
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="hello">abc</div>
<div id="result"></div>
<button>button</button>
【问题讨论】:
-
一个不只是声明
this,它存在于不同的上下文中,具体取决于它在代码中的使用位置。您的 document.ready 函数中的this指的是浏览器窗口对象。事件处理程序中的this通常指的是被点击/更改/提交的浏览器元素,这就是我认为您正在寻找的内容。 -
@James 但是为什么 this 不成为被点击的事件处理程序(即使我声明它时它是窗口),当它在函数中使用时?它不应该“再次检查” this 当前指的是什么吗?那是我不明白的。
-
不,它不会再次检查。 thisID 将始终具有窗口对象 ID 的值。如果您将
thisID = this.id放在按钮单击处理程序中,它将被更新为单击按钮的 id。 -
变量不“记住”它是如何初始化的。同样,如果您执行
var a = 2; var b = a + 1;,则变量b不会在您更改a的值时发生变化。
标签: javascript jquery html variables global-variables