Javascript 使用document.on(..)-Jquery选择using“this”关键字

Javascript 使用document.on(..)-Jquery选择using“this”关键字,javascript,jquery,html,nested,Javascript,Jquery,Html,Nested,加载页面后从json文件获取的我的html代码: <div class="fooditem"> <select class="quan"> <option value="0">0</option> </select> </div> 我想在单击div时单击select选项标记。 我发现这里的this关键字表示的是文档,而不是特定的类。 那我该怎么做呢? 以下是要将o

加载页面后从json文件获取的我的html代码:

<div class="fooditem">
       <select class="quan">
               <option value="0">0</option>
       </select>
 </div>
我想在单击div时单击select选项标记。 我发现这里的this关键字表示的是文档,而不是特定的类。 那我该怎么做呢?
以下是要将onclick事件绑定到文档的

。尝试将jQuery代码段更改为:

$(".fooditem").on("click", function(e) {
    e.preventDefault();
    $(this).find('.quan').click();
});
第一个问题:

通过侦听click,然后在子元素上生成click,您将获得一个无限循环

唯一的解决办法是:

将子图元移动到捕捉单击的图元外部。 注意:不能阻止select的click处理程序,否则它将停止工作

但是,作为替代方案,您可以执行以下操作之一:

在select元素上设置焦点 更改选择元素的值 在select元素上生成一个更改事件,就像选择了该元素一样 但是,您不能让select简单地弹出并选择项目

举例如下:

1设置焦点

$(document).on("click", ".fooditem", function(e) {
    $(this).find('.quan').focus();
});
2更改所选值

$(document).on("click", ".fooditem", function(e) {
    $(this).find('.quan').val(0); // or whatever value
});
3在选择元素上生成更改事件

$(document).on("click", ".fooditem", function(e) {
    $(this).find('.quan').trigger('change');
});
注:这可以通过改变或不改变先前的值来实现


注意:您在评论中说过,我只想在单击div时打开下拉列表并选择值,但这不会发生。单击事件不会触发打开选择。请看这个避免了递归的示例:jsfiddle.net/TrueBlueAussie/zgub3838/7

我无法重现您的问题。jQuery的哪个版本?也许创建一个JSFIDLE。等等,它不应该是。。。。这应该是元素…触发无限循环的点击不是一个好主意。您的.quan是否停止事件传播?3条注释:1您的代码导致递归调用,因为您从单击处理程序内部触发对子体的单击。2您无法通过发送单击事件来获取要打开的选择。你需要明确你的总体目标。e、 g.您是否只需要在单击周围的div后给出select焦点?目的是通过单击div打开select。是否可能?这是一个委托事件处理程序,是有效的。e.preventdefault是键,但只有在.quan的处理程序中存在时才是键。-1:此代码仍然存在递归错误,这是实际问题:请检查代码的控制台输出。对不起的:
$(document).on("click", ".fooditem", function(e) {
    $(this).find('.quan').trigger('change');
});