javascript - jQuery mobile - 如何连接 <a href> 和点击事件?

标签 javascript jquery jquery-mobile

我是 jQuery 和 jQuery mobile 的新手。

我遵循了一些示例和文档并创建了以下代码:

function initListByUrl(id, requestUrl) {
$.ajax({
    url: requestUrl,
    type:'GET',
    dataType:'json',
    success: function(data) {
        var items = []
        $.each(data, function(i, elem) {
                items.push('<li id="cat_li_'+i+'"><a href="#places">' + elem.name + '</a></li>');
            });
        id.html(items).listview('refresh');
    }

});
}


$(document).on("click", '[id^=cat_li]', function(event, ui) {
  console.log(3);
 })

我需要在点击事件的上下文中使用 $.ajax 中的 elem 事件

这是因为 elem 对象包含一个在单击该项目时相关的字段。

我该怎么做?

编辑

只是为了澄清。

initListByUrl 函数在文档就绪时调用。它通过检索到的包含数组的 json 对象构建一个 ListView 。

如果我在点击事件的上下文中有 elem,我会做这样的事情:

$(document).on("click", '[id^=cat_li]', function(event, ui) {
    call_some_function(elem.someField);
 })

我的问题是如何在单击事件的范围内拥有适当的 elem 对象?

编辑2

这是我的完整代码:

var stack = []

var site_url = 'http://localhost:3000';
$(function() {


    initCategoriesList();

    $("#places").on('pageinit', function() {
        var category = stack.pop();
        initPlacesList(category);
    });

    $("#place").on('pageinit', function() {

    });


});


function initCategoriesList(id, requestUrl) {
    $.ajax({
        url: site_url + '/categories',
        type:'GET',
        dataType:'json',
        success: function(data) {
            var items = []
            $.each(data, function(i, elem) {
                items.push('<li id="cat_li_'+i+'"><a href="#places">' + elem.name + '</a></li>');
            });
            $("#categories_ul").html(items).listview('refresh');
        }

    });
}

function initPlacesList(category_id) {
    $.ajax({
        url: site_url + '/business_places/category/' + category_id,
        type:'GET',
        dataType:'json',
        success: function(data) {
            var items = []
            $.each(data, function(i, elem) {
                items.push('<li id="place_li_'+i+'"><a href="#place">' + elem.name + '</a></li>');
                $("#places_ul").html(items).listview('refresh');
                var element = $("#place_li_" + i)[0]; 
                $.data(element, "object", elem); 
            });
            $("#places_ul").html(items).listview('refresh');

        }

    });

}

$(document).on("click", '[id^=cat_li]', function(event, ui) {
    stack.push(event.target.innerText);
})


$(document).on("click", '[id^=place_li]', function(event, ui) {
    var place = $.data(this, "object");
        alert(place.name);
    })

var place = $.data(this, "对象"); 最终未定义

最佳答案

最好的选择是在 li 元素内创建自定义数据属性,以便稍后访问。将您需要的数据推送到这些自定义属性。示例:

items.push('<li id="cat_li_'+i+'" data-custom-cool="' + elem.someData + '"><a href="#places">' + elem.name + '</a></li>');

现在,您可以根据需要使用点击处理程序中的 this 提取数据。

$(this).data("custom-cool"); //this is equiv to elem.someData .

或者,如果您有更大的数据,您可以使用 $.data 来存储带有元素的对象:

$.each(data, function(i, elem) {
            items.push('<li id="cat_li_'+i+'"><a href="#places">' + elem.name + '</a></li>');
        });
    id.html(items).listview('refresh');
    var element = $("#cat_li_" + i)[0]; //cant use jQ object
    $.data(element, "object", elem); //assign object
});

现在您的点击处理程序应该能够像这样访问该对象(在处理程序内部):

console.log($.data(this, "object").objProperty); //replace objProperty with your property to get.

演示:http://jsfiddle.net/tymeJV/vx8Xt/1/单击“testdiv”并查看控制台。

关于javascript - jQuery mobile - 如何连接 <a href> 和点击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18639302/

相关文章:

javascript - 如何在 javascript 中编写 onblur 和 onfocus 事件?

javascript - Jquery mobile - 如何防止可折叠的 div 在点击后展开?

c# - ASP.NET Response.Redirect with jQuery Mobile - Url hashing

javascript - 在 Chrome 控制台中向对象添加方法

javascript - 如何创建一个脚本来单击behance页面上的所有关注按钮?

javascript - Vue.js,使用插件方法

javascript - JQuery设置CSS显示: none when should be block

javascript - Jquery-Mobile:如何重新加载/刷新内部页面

javascript - ajax发布错误: internal error 500 on post method

javascript - getElementById 的多个 ID