0

我正在尝试遍历<ul>列表中的所有子项,分配一个onclick事件侦听器并使用该事件的元素 ID。我在我的应用程序中使用 jQuery 和 jQueryMobile。出于某种原因,元素的 ID 属性总是显示为空白?当我提醒实际元素时,我得到[ObjectHTMLLIElement]. 当我使用 DevTools 时,ID 字段出现在所有元素中?

这是列表视图

这就是我试图实现这一目标的方式......

function set_onclicks()
{
    var count = $('#main-listview').children().length;
    if (count > 0)
    {
        $('#main-listview').children().each(function() {
            this.onclick = function() {
                project_id = this.id;
                $.mobile.changePage('#main-project-page', 'slide', true, true);
            }
        });
    }
}

谁能指出我正确的方向并帮助解释为什么我不能抓住身份证?提前感谢您的帮助!

弥敦道

最近的编辑

我已经尝试过实现这一点,现在我知道我不需要通过.each()循环绑定。

$('#main-listview').children().click(function() {
    alert(this);
    alert(this.id);
    project_id = this.id;
    $.mobile.changePage('#main-project-page', 'slide', true, true);
});

第一个警报给我[ object HTTMLLIElement ]下一个警报给我一个空白...?

编辑 2 - HTML 示例 我想我现在知道为什么了。jQueryMobile在添加链接<div>之前添加了一些元素<a>。现在,我将不得不弄清楚如何解决这个问题..

<ul data-role="listview" data-inset="true" data-filter="true" data-filter-theme="a" id="main-listview" class="ui-listview ui-listview-inset ui-corner-all ui-shadow">
    <li data-corners="false" data-shadow="false" data-iconshadow="true" data-wrapperels="div" data-icon="arrow-r" data-iconpos="right" data-theme="a" class="ui-btn ui-btn-icon-right ui-li-has-arrow ui-li ui-first-child ui-btn-up-a">
        <div class="ui-btn-inner ui-li">
            <div class="ui-btn-text">
                <a id="51e0278f2a1cb33a08000002" class="ui-link-inherit">123456 - The Project</a>
            </div>
            <span class="ui-icon ui-icon-arrow-r ui-icon-shadow">&nbsp;</span>
        </div>
    </li>
</ul>
4

2 回答 2

1

您正在尝试访问javascript 事件处理程序,除非您通过对象this绑定它,否则您无法访问jQuery

改变

this.onclick = function() {
            project_id = this.id;
            $.mobile.changePage('#main-project-page', 'slide', true, true);
        }

$(this).click( function() {
            project_id = this.id;
            $.mobile.changePage('#main-project-page', 'slide', true, true);
});

简单的解决方案您不必在绑定之前检查选择器是否返回了元素,这要归功于 jquery,让生活变得轻松,并且您不需要将每个元素用于绑定事件。

$('#main-listview').click(function() {           
   project_id = this.id;
   $.mobile.changePage('#main-project-page', 'slide', true, true);          
});
于 2013-07-25T12:14:53.747 回答
1

我不知道你为什么使用函数来设置点击事件..(并且不需要使用循环$.each来设置每个元素的点击事件)。

只是这应该工作

  $('#main-listview').children().click(function() {
             project_id = this.id;
            $.mobile.changePage('#main-project-page', 'slide', true, true);
        }
    });
于 2013-07-25T12:16:03.440 回答