【问题标题】:How to add click event to dynamic list view in PhoneGap?如何将点击事件添加到PhoneGap中的动态列表视图?
【发布时间】:2015-01-08 05:38:06
【问题描述】:

我必须将点击事件添加到动态列表视图中。当我单击此列表时,它会重定向到更多详细信息页面。我正在获取特定区域的可用酒店列表并插入到列表视图中。现在,当我单击任何特定列表时,酒店将重定向到更多详细信息页面。
检查以下可用酒店列表的图像列表视图。每家酒店都有唯一的 ID 因此,当我单击任何列表时,它将使用该唯一的酒店 ID 并从服务器获取该酒店的更多详细信息,并显示在该特定酒店的一个专用页面上。 我的问题是如何在动态列表视图中添加点击并传递唯一的酒店 ID,以便稍后我能够使用该酒店 ID 从服务器获取更多信息。

我的脚本代码,如何在动态列表中添加点击

<script> 
            $(document).ready(function(){ 
                $("#btnReg").click(function(){ 
                    $("#listHotelsOptions").empty();
                    var distance = document.getElementById('distance_id').value; 
                    var output=""; 
                    var hiddenId="";
                    $.ajax({ 
                            url:"http://192.168.1.4/Experiements/webservices/getHotels.php", 
                            type:"GET", 
                            dataType:"json", 
                            data:{type:"login", Distance:distance}, 
                            ContentType:"application/json", 
                            success: function(response){ 
                            console.log(response) 
                                $.each(response, function(index,value){                                                                 
                                          hiddenId+='<li  type="hidden">'+value.Hotel.Id+'</li>';
                                          output+='<li ><a href="#" style="text-decoration:none;"> <img alt="chef" src="./images/chef.min.png" width="20px" height="20px" >'+value.Hotel.Name+' has'+value.Hotel.Romms+'</a></li>';
                                }); 
        $("#listHotelsOption").append(output).listview().listview('refresh'); 
                        }, 
                            error: function(err){ 
                            alert(JSON.stringify(err)); 
                        } 
                    }) //ajax 
                }); //click 
            }); //ready 
</script>

【问题讨论】:

  • @Ionică Bizău,感谢您的回复,但我是网络技术的新手,我需要更具体的..
  • 查看非常基本的示例,这也是在事件委托的纯 javascript 中。希望有帮助!

标签: javascript jquery list cordova jquery-mobile


【解决方案1】:

将酒店 ID 保存为可见 LI 的 data-attribute,而不是 2 个 LI 元素:

$.each(response, function(index,value){                                                                 
    output+='<li data-hotelid="'+value.Hotel.Id+'"><a href="#" style="text-decoration:none;"> <img alt="chef" src="./images/chef.min.png" width="20px" height="20px" >'+value.Hotel.Name+' has'+value.Hotel.Romms+'</a></li>';
}); 

您应该使用页面事件之一,而不是 jQuery Mobile 中的 $(document).ready(function(){,例如页面创建。在创建页面时,使用 event delegation 为所有 LI 创建一个单击处理程序,以便包含动态创建的处理程序。使用 jQM 方法 jqmData() 从 LI 中检索 id 数据属性:

$(document).on("pagecreate", "#yourpageid", function(){
    $("#listHotelsOption").on("click", "li", function(){
        //get hotel id
        var id = $(this).jqmData("hotelid");
        ... rest of click handler
    });

    $("#btnReg").on("click", function(){
       //your code to dynamically create list
    });  
});

这是一个有效的DEMO

【讨论】:

  • 感谢您的回复,我对您的代码有些困惑,我的要求是当我单击#btnReg 时,它将提供该区域内的所有可用酒店。 #listHotelOption 是未排序的列表,其中包含按下#btnReg 后的所有酒店。现在,我单击上面的任何特定列表,它将重定向到#hotelPage,其中包含更多详细信息。现在,这些详细信息将通过根据hotel_id 从数据库中获取信息来填充。在为每个酒店按下#btnReg 时,Hotel_id 第一次出现。谢谢,我正在等待回复...
  • @neelabhsingh,这正是我的代码所做的。保持 btnReg 点击,但使用酒店 ID 的数据属性(我的第一个代码示例),然后为获取酒店 ID 的 LI 添加点击事件。您需要提供检索酒店详细信息的其余代码。
  • @neelabhsingh,我添加了一个工作演示:jsfiddle.net/ezanker/Lb2m318p
  • @neelabhsingh,您是否将“#yourpageid”更改为您的 data-role="page" DIV 的实际页面 ID?
  • 感谢如此生动的解释,我复制了我们的代码并粘贴到 Eclipse 上它不起作用..
【解决方案2】:

试试这个

$("#btnReg").on('click',function(){ 

}); //click 

编辑:

$.each(response, function(index,value){                                                                 
  hiddenId+='<li  type="hidden">'+value.Hotel.Id+'</li>';
  output+='<li class="hotel"  ><a href="#" style="text-decoration:none;"> <img alt="chef" src="./images/chef.min.png" width="20px" height="20px" >'+value.Hotel.Name+' has'+value.Hotel.Romms+'</a></li>';
}); 

$(".hotel").on('click',function(){ 

}); //click 

EDIT2

$(".hotel").live('click',function(){ 

}); //click 

$(".hotel").delegate('click',function(){ 

}); //click 

EDIT3

'<li class="hotel" id="'+value.Hotel.Id+'"  ><a href="#" style="text-decoration:none;"> <img alt="chef" src="./images/chef.min.png" width="20px" height="20px" >'+value.Hotel.Name+' has'+value.Hotel.Romms+'</a></li>';

$(".hotel").live('click',function(){ 
  var id = $(this).attr('id');
  alert(id);
}); //click 

【讨论】:

  • $(".hotel").on('click',function(){ alert("1"); });不工作..警报也不显示..
  • 现在它正在工作,谢谢,但我需要的是,当我点击任何列表时,它会获得唯一的 ID 并使用该 ID 我必须获取数据并将该信息放入具有类似名称的单独页面酒店的价格、房间图片和所有其他信息,每个酒店的页面设计都是相同的,并且每个元素都有 id,比如价格、房间图片,所以我必须分配新的获取值..
  • 但是没有工作。和 var id = $(this).attr('id'); var id = $(this).attr('Id');我都尝试了...,请检查编辑 3 并将 id 设置为 Id..
  • 我正在尝试以下..$(".hotel").live('click',function(){ var id=$(this).attr('value.Chef.Id' ); 警报(id); });
  • 【解决方案3】:

     <a href="detail.html?id=' + value.Hotel.Id + '"> before your <li>
    

    使用该函数获取详情页的id

        function getUrlVars() {
            var vars = [], hash;
            var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
            for(var i = 0; i < hashes.length; i++)
            {
                hash = hashes[i].split('=');
                vars.push(hash[0]);
                vars[hash[0]] = hash[1];
            }
            return vars; // this is your id value
        }
    
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签