Javascript 通过jQuery动态添加HTML元素后的额外单击

Javascript 通过jQuery动态添加HTML元素后的额外单击,javascript,jquery,jquery-click-event,Javascript,Jquery,Jquery Click Event,我在data.html @item.FullName 在此之后,我假设使用如下的click事件 $('#searchResultContainer').html(''; $.getJSON('@Url.Action(“搜索”,“设备”)”){ s:$('searchStr').val() }, 功能(数据){ 如果(data.success==true){ $('#searchResultContainer').append(data.html); $(文档).on('click','.de

我在
data.html


@item.FullName
在此之后,我假设使用如下的click事件

$('#searchResultContainer').html('';
$.getJSON('@Url.Action(“搜索”,“设备”)”){
s:$('searchStr').val()
},
功能(数据){
如果(data.success==true){
$('#searchResultContainer').append(data.html);
$(文档).on('click','.deviceName',函数(e){
e、 预防默认值();
e、 停止传播();
//console.log('deviceName'+$(this.data('href'));
window.location.href=$(this.data('href');
});
}
});
但当我第一次点击时,什么也没发生。在第二次单击时,它会正常工作。 我尝试在
div
上使用
focus()
,但如果没有帮助

这种方法也无济于事


我在这里遗漏了什么?

将代码移到外部

$(document).on('click', '.deviceName', function(e) {
  e.preventDefault();
  e.stopPropagation();
  // console.log('deviceName ' + $(this).data('href'));
  window.location.href = $(this).data('href');
});
谢谢大家

我在这里找到了解决办法

因此,我只是在
data.html中使用一个常规的
,然后在
之后将注意力集中在
div上,并动态添加数据。点击一下就可以了

$('#searchResultContainer').html('');
$.getJSON('@Url.Action("Search", "Devices")', {
    s: $('#searchStr').val()
  },
  function(data) {
    if (data.success === true) {
       if (data.success === true) {
             $('#searchResultContainer').html(data.html);   
             window.location.hash = '#searchResultContainer';
        }
    }
  });

是的。它没有帮助((而且即使我在动态添加的HTML中使用
,我也必须单击两次才能生效。您在这里缺少一个引号
$.getJSON('@Url.Action(“搜索”,“设备”,“s:$('.\searchStr').val()),
@Roy抱歉,这不是问题所在。它仅存在于示例代码中。它已被更正。deviceName上的click事件只有在成功解析getJSON响应后才能注册,因此在调用之前单击该元素不起任何作用是正常的。为什么要将click事件附加到异步f中的文档中unction?@randomSoul我只是想弄明白为什么我需要点击两次。起初我把它放在异步函数之外,但我也不工作。