Jquery Mobile检测在列表视图中单击了哪一行
Jquery Mobile detect which row was clicked in a listview
我到处找,似乎在任何地方都找不到。有人知道如何获得列表视图中点击的行的值吗?这可以是对象中从名称到索引的任何内容。现在我有一个处理水龙头的功能。我需要能够在新页面转换时将值传递给我正在加载的新页面。我想我可以在这里做:
$('#taskListTable').delegate('li', 'tap', function () {
console.log('clicked');
//Insert code here to pull a value from either an index or a name and save it
});
我想也许在杂碎中做这件事会很好?不过,我不确定网络上来自原生iOS开发的标准做法是什么。有人有什么线索吗?谢谢
这就是我填充列表视图的方式:
$.each(tasks, function(index, task) {
$taskList.append("<li><a href='taskDetails.html'> <h3>"+task.name+"</h3><p>"+task.description+"</p></a></li>");
});
taskDetails.html需要任务的索引,这样我就可以从服务器上获取详细信息。这样做的标准做法是什么?
要获得tap
ed列表项的索引,可以执行以下操作:
$('#taskListTable').delegate('li', 'tap', function () {
console.log('clicked');
var index = $(this).index();
});
是的,就是这样。尽管这假设<li>
元素都是兄弟元素。
.index()
的文档:http://api.jquery.com/index
如果你想转换到新页面:
$('#taskListTable').delegate('li', 'tap', function () {
console.log('clicked');
$.mobile.changePage($(this).find('a').attr('href'), {
data : { selectedIndex : $(this).index() }
});
});
这将获得新页面,并将selectedIndex
变量附加为查询字符串参数,该参数设置为tap
ped列表项的索引。
此外,为了防止点击列表项中链接的默认行为,我将把这个事件处理程序附加到链接元素:
$('#taskListTable').delegate('a', 'tap', function (event) {
event.preventDefault();
console.log('link clicked');
$.mobile.changePage($(this).attr('href'), {
data : { selectedIndex : $(this).closest('li').index() }
});
});
新版本的jQuery不赞成使用"delegate"方法。考虑使用这个替代:
$('#taskListTable').on('tap', 'a', function (event) {
}
这里有另一种获取id的方法,如果你有一个启用数据库的应用程序,并且你要搜索的id是数据库的id,而不是行索引,那么它特别有用:
填写表格时,请考虑以下内容:
<ul id="taskListTable">
<li id="task400" class="tasks">Task with db id 400</li>
<li id="task295" class="tasks">Task with db id 295</li>
</ul>
$('#taskListTable').on('tap', 'li', function (event) {
variable = $(this).attr('id').substr(4);
}
这将获得数据库id,您可以将其传递到其他页面。
要获得名称,可以执行以下操作:
$(this).find('h3').html()
或者,您可以在标记中使用一些东西,如id或数据属性,以提供比名称更好的句柄。
这种方法怎么样?
$taskList.append("<li><a href='taskDetails.html?id=" + task.id + "'></a><h3>" + task.name + "</h3>...</li>");
然后反演CCD_ 6参数。
Jasper的解决方案很好,但如果您的事件处理程序中有任何其他编辑DOM的代码,那么在代码中使用"this"关键字时,它可能会指向完全不同的地方。
我曾多次在键盘上摇头,因为我的用户说"我点击了第一项,但这总是会打开列表中最后一项的编辑屏幕。"所以不知何故,使用"这个"不是正确的做法。
此外,当我尝试event.target、event.currentTarget或event.originalTarget时,这些都不起作用。他们都指向jQueryMobile"页面",当代码运行时,该页面是可见的(甚至与表所在的页面不同)。
安全和/或预期的方法是:
- 使用event.originalEvent.srcElement而不是"this"
- 不使用.delete(),而是使用.on()
- 使用$(document).on()绑定事件,而不是使用$('#table').on
因此,这将导致:
$(document).on('tap','#taskListTable li',function(event){
//The properties of 'event' relate to $(document), not to '#taskListTable li',
//so avoid .currentTarget, .target etc.
//But fortunately 'event' does have one property that refers to the original
//user event.
var theOriginalTapEvent = event.originalEvent;
var theRealClickedElement = theOriginalTapEvent.srcElement;
//Note that the clicked element could be a sub-element of the li
//whose index you want. So just referencing theRealClickedItem could
//could still be getting you bad results.
var theRelevantListItem = $(theRealClickedElement).parents('li');
//Now you're ready to get the item's index or whatever.
})
- 通过单击动态加载的表中同一行的另一个字段来更新一行的字段
- 在GridView中,当单击复选框时,在网格的同一行中使用JavaScript将标签中的值添加到TextBox
- 从 html 表中选择一行(突出显示)并在单击按钮时发送值
- 如何找出单击了哪一行
- 仅单击一行中的一个项目
- 在表格最后一行(链接)中显示菜单,并在单击菜单项时显示模式窗口
- 递归可防止函数在一行中被多次单击
- 单击同一行中的任何复选框时,选中/取消选中表行中的复选框
- 单击按钮时删除一行
- 单击编辑按钮时,如何使用 jquery 从循环表的每一行传递 id
- 单击“单击”jqgrid“多选缺少最后一行
- 我想单击一个按钮,一次只执行已经制作的程序中的一行代码.(JavaScript)
- Javascript 在单击时将输入值更改为单击按钮的同一行上的值
- 通过单击删除同一行中存在的链接来删除特定行
- 如何获取新表行仅当先前输入的一行不为空时才单击
- 单击表中的按钮后从上一行获取文本
- 单击同一行中的按钮后递减值 - 挖空
- 单击行后,从另一行中删除分离的类
- 单击按钮时,验证是否必须使用 Jquery 将至少一行移动到自定义表中
- jqxTreeGrid如果我单击一行中的特定单元格,则禁用对该行的选择/取消选择