如何使用Jquery Mobile中可点击列表项内的按钮创建列表视图

时间:2014-04-25 15:45:39

标签: jquery-mobile jquery-mobile-listview

有没有办法在Jquery Mobile中创建一个包含可点击列表项的列表视图,每个项目有3个按钮?我不想使用分组按钮列表视图。我试图创建这个但按钮点击不起作用。单击任何按钮的行为类似于单击列表项。

1 个答案:

答案 0 :(得分:1)

您可以向按钮点击添加e.stopImmediatePropagation();http://api.jquery.com/event.stopimmediatepropagation/),这样它们就不会传播到父列表项。

<强>更新

OP在评论中提到列表项是动态生成的。原始代码仍然有效,因为事件委派( https://learn.jquery.com/events/event-delegation/ )用于按钮。这是一个更新的例子:

在标记中清空UL

<ul data-role="listview" id="thelist">
</ul>

在页面创建上,填写列表视图并添加点击处理程序

$(document).on("pagecreate", "#page1", function(){

    //make list dynamically
    var allItems = '';
    for (var i=0; i< 4; i++){
         allItems += '<li data-rowid="' + i + '"><a href="#"><div data-role="controlgroup" data-type="horizontal"><input type="button" value="Hmm" /><input type="button" value="No" /><input type="button" value="Yes" /></div>&nbsp;Item ' + i + ' text or description</a></li>';   
    }
    $("#thelist").empty().append(allItems).listview("refresh").enhanceWithin();


    $("#thelist").on("click", "li input", function(e){
        e.stopImmediatePropagation();        
        var rowid = $(this).parents("li").data("rowid");
        var btnText = $(this).val();
        alert("You clicked the button: " + btnText + " on row number: " + rowid);
    });

    $("#thelist").on("click", "li a", function(e){
        alert("You clicked the listitem");
    });

});
  

更新了 DEMO

<强> ORIGINAL:

  

<强> DEMO

<ul data-role="listview" id="thelist">
    <li data-rowid="1">
        <a href="#">            
            <div data-role="controlgroup" data-type="horizontal">
                <input type="button" value="Hmm" />
                <input type="button" value="No" />
                <input type="button" value="Yes" />
            </div>
            Item 1 text or description
        </a>
    </li>
</ul>

$(document).on("pagecreate", "#page1", function(){

    $("#thelist li").on("click", "input", function(e){
        e.stopImmediatePropagation();        
        var rowid = $(this).parents("li").data("rowid");
        var btnText = $(this).val();
        alert("You clicked the button: " + btnText + " on row number: " + rowid);
    });

    $("#thelist li").on("click", "a", function(e){
        alert("You clicked the listitem");
    });

});

您也可以将按钮放在listitem锚标签之外,并使用CSS来很好地定位所有内容......