Javascript 使用document.on(..)-Jquery选择using“this”关键字
加载页面后从json文件获取的我的html代码: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
<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');
});