首先我想说我对 jQuery 很陌生,我昨天才开始,所以我对一些逻辑有点模糊,如果我没有使用最佳实践,请不要犹豫纠正我。
基本上我想做的是:
- 我有一个带有几个按钮的网页
- 当我单击其中一个按钮时,我将加载一个包含一些元素的 div(根据按下的按钮而有所不同)
- 在某些情况下,有一个下拉列表,我想在加载时用 ajax 填充
我可以正确处理按钮和 div 加载,但我的下拉列表有点问题。我想在文档中加载下拉列表时进行 ajax 调用,但我不知道该怎么做。
当我单击其中一个按钮时创建的一点点 HTML:
<div class='content'>
<select class='dropdown'></select>
</div>
这仅在我单击一个按钮后添加到文档中,它首先不存在(基本上是因为不同的按钮会在内容 div 中加载不同的内容)
我第一次在我的 JS 中尝试过:
$('select.dropdown').load(function() {
alert('dropdown loaded');
});
这根本不起作用,无论我把这点 JS 放在哪里,警报都不会出现(我试着在 html 中创建选择之前把它放在,我试着把它放在后面,不管我从来没有收到警报)
所以我尝试了准备好的功能:
$('select.dropdown').ready(function() {
alert('dropdown loaded');
});
这奏效了。我用 .post() 替换了警报,如下所示:
$('select.dropdown').ready(function() {
$.post("url.php", {arg: 'arg'}, function(data) {
$.each(data, function() {
$('select.dropdown').append("html stuff with <option>");
});
}, 'json');
而且效果很好。但问题是,现在我只想填充触发 .ready() 事件的选择标签,所以我尝试使用 $(this) :
$('select.dropdown').ready(function() {
$.post("url.php", {arg: 'arg'}, function(data) {
$.each(data, function() {
$(this).append("html stuff with <option>");
});
}, 'json');
那没有用。如果我尝试添加警报以查看“this”所引用的内容:
$('select.dropdown').ready(function() {
alert($(this).attr('class'));
$.post("url.php", {arg: 'arg'}, function(data) {
$.each(data, function() {
$(this).append("html stuff with <option>");
});
}, 'json');
我得到“未定义”。
所以基本上我的问题是:
- 为什么 .ready() 有效而不是 .load() ?
- 如何在 .ready() 函数中使用 $(this) 来引用触发 ready 事件的下拉菜单?
我想使用 $(this) 而不是第一个解决方案的原因是因为我将动态添加其他下拉菜单,这将使用相同的 HTML 标记和相同的 JS 代码(如果可能),所以我必须区分哪个下拉菜单触发了准备好的事件。
关于如何做到这一点的任何想法/建议?