jQuery mobile - 如何在 <href> 和 Click 事件之间连接
jQuery mobile - how to connect between <a href> and the click event?
我是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 函数在 document-ready 中调用。它通过检索到的 json 对象构建一个列表视图,该对象包含一个数组。
如果我在点击事件的上下文中有 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, "object");最终具有未定义
最好的办法是在 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"并查看控制台。
我认为问题出在id.html(items)
,.html()
不接受数组。
id.html(items.join('')).listview('refresh');
另外,为了解决您的其他问题,您应该使用类而不是ids:
function initListByUrl(id, requestUrl) {
$.getJSON(requestUrl, function(data) {
var items = []
$.each(data, function(i, elem) {
items.push('<li class="cat"><a href="#places">' + elem.name + '</a></li>');
});
id.html(items).listview('refresh');
});
}
$(document).on("click", '.cat a', function(event, ui) {
console.log(3);
});
就像 ajax 默认是异步的一样,您有两个选择:
- 您可以通过将选项async切换为false来使ajax请求同步 - 有关更多详细信息,请参阅jQuery.ajax() API
- 您可以将 elem 保存在全局变量中,并在 onclick-handler 中使用它
如果您告诉我们何时执行函数 initListByURL() 可能会有所帮助。
在列表中的所有项都附加到文档后,应将事件绑定移动到成功函数中
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');
// move your click event handling here
}
相关文章:
- Fancybox是否将Click事件静音
- jQuery:.click(function(){(element),collapse('show',f
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 如何使用密码检测网络中的状态连接
- 如何处理node.js节点mongodb中的连接和查询队列
- Rails-JQueryUIAutcomplete和AJAX不工作,可以't连接到数据库
- Twilio-显示所有连接参与者的远程参与者视频
- 操作放置在画布上的元素之间的连接
- TypeError:_this.store.getState在使用来自Redux的连接时不是函数
- jQuery UI可排序-多连接列表拖动
- 如何使用offer/answer交换来自两个对等连接的流
- 在Qualtrics中,介绍如何动态连接两个滑块
- 使用优化器在慢速连接上加载main.js时需要js超时
- 如果连接类型为none,则Javascript Function Only警报
- GTK百老汇支持同时连接
- 在node.js中写入ECONNRESET错误和套接字连接检查
- 如何将所有JS文件连接到一个文件夹中
- jQuery mobile - 如何在
和 Click 事件之间连接 - 如何将 setInterval 和 .on(“click”) 函数连接在一起
- 尝试连接一个jQuery .click()事件.但它是被解雇(而不是仅仅布线)