1

我在 a 中有许多超链接ul,我想捕获对超链接的点击

div的结构如下,

<div style="margin:3%;" id="city-list">
        <ul data-role="listview" data-theme="b"  data-filter="true" data-filter-placeholder="Filter Cities...">
            <?php foreach($cities as $city): ?>
            <li>
                <a id="city_<?php echo $city['city_id'] .'_'. $city['city_name']?>" href="#">
                    <span style="font-size: 14px;"><?php echo $city['city_name']; ?></span><br/>
                </a>
            </li>
            <?php endforeach; ?>
            <li class="no-results" style="display:none;">No results found.</li>
        </ul>
    </div>

捕获点击的jQuery代码如下,

$("#city-list").delegate('a','click', function(event) {
    event.preventDefault();
     //       console.log(event.target);
    var city_id = event.target.id,
    service_type = "<?php echo $service_type; ?>";
    JE.search_regions(city_id, service_type);
    $.cookies.set('city_id', city_id);
});

这在大多数情况下都有效,除了在某些随机时间。

那个时候,event.target就是标签span里面了。a我不知道为什么会这样。

请帮我调试一下。

4

2 回答 2

4

e.target是实际点击的元素,所以如果你点击span元素,e.target将是span元素,但是点击会冒泡到父元素,所以即使它附加到父元素,函数仍然会运行,这很自然,因为在span里面a, 并且单击span也是对a元素的单击,但e.target会准确识别实际收到单击的元素。

要引用a元素,请改用this关键字,它将引用绑定的元素,在本例中为a元素。

于 2012-08-08T06:54:43.363 回答
0

你为什么不使用

var city_id = jQuery(this).attr("id");

而不是

var city_id = event.target.id;

干杯!

于 2012-08-08T06:58:09.960 回答