jquery 移动设备中动态添加的锚点击不调用函数

dynamically added anchor click doesn't call function in jquery mobile

我的页面从本地 SQL 获取字符串数据,并使用下面的函数(简化版)

作为 li 将其附加到 data-role='listview'
function CreateListview{
   var temp ='<li><a href="#" class="anchor">String Here</a></li>';
   $("#<ul>-selector").append(temp).listview("refresh");
}

好吧,它工作正常所以我为锚点绑定了一个点击事件(class='.anchor')

$(document).on('vclick', '.anchor', function(e){
  e.preventDefault();
  alert("ANCHOR CLICKED");
});

$(document).on('vclick', '#ul-selector > a', function(e){
  e.preventDefault();
  alert("ANCHOR CLICKED");
});

$(document).on('vclick', '#ul-selector > li a', function(e){
  e.preventDefault();
  alert("ANCHOR CLICKED");
});

或者甚至

$(document).on('vclick', 'a', function(e){
  e.preventDefault();
  alert("ANCHOR CLICKED");
});

但是没有效果 我通过在动态添加的 li 上使用下面的函数仔细检查了其他元素上的单击事件是否有效,它有时有效,有时无效。

我不知道为什么它会随机工作,

但我检查了一些其他动态添加的元素是否触发了点击事件。

$(document).on('vclick', '#ul-selector > li', function(e){
  alert("<li> CLICKED");
});

将点击函数绑定到动态添加的anchors时,该函数不会被触发.. 这可能是一个错误吗?还是我写错了代码?

你能给我一个将点击事件绑定到动态添加的锚点的工作示例吗?

像这样

添加 html 后绑定事件
function CreateListview{
   var temp ='<li><a href="#" class="anchor">String Here</a></li>';
   $("#<ul>-selector").append(temp).listview("refresh");

$("#<ul>-selector > li").on("click",function(){
 alert("<li> CLICKED");
});

}

检查这个 fiddle 你可以在这里应用相同的逻辑

您没有收听 click 事件,而是 vclick(???).

$("yourUl").on('click', '.anchor', function(e){
  e.preventDefault();
  alert("ANCHOR CLICKED");
});

我觉得还行。

function CreateListView() {
   var temp ='<li><a href="#" class="anchor">String Here</a></li>';
   $("#selector").append(temp).listview("refresh");
}

$(document).on('vclick', '.anchor', function(e){
  e.preventDefault();
  alert("ANCHOR CLICKED");
});

$("#createLi").on("vclick", function(){
    CreateListView();
    alert("test");
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.js"></script>

<div id="content">
    <ul id="selector">
    </ul>
</div>
<input id="createLi" type="button" value="create li"/>

我是不是漏掉了什么?

我找到了解决方案。

问题:使用 cordova,锚点上的 'click' 即使使用 e.preventDefault() 也不会触发功能;相反,'touchstart' 工作正常。

解决方案:'click' -> 'touchstart' 在设备上工作

$(document).on('touchstart', '#anchor-selector', function(){
   alert("touch");
});