1

这就是我想要做的:

我在网页中有很多锚点,有些是用 ajax 管理的,因为它们是用 jquery 绑定到点击事件的;有些不是,所以他们通过常规的 http 请求发送到另一个页面。

<a href="#/something" >something</a>
<a href="#/ajax/something" class="blabla">ajax something</a>

<script type="text/javascript">
    $(function(){
       $('.blabla').click(function(){
          //doing some ajax return false so anchor don't redirect
          return false;
       });
    });
</script>

请不要对锚类做出回应,例如“嘿,选择所有没有“blabla”类的锚”。我这样做是因为我试图在页面上为每个不是通过 ajax 管理的锚点放置一个“等待”标签。我想知道一个锚是否有一个绑定到自身的点击事件。

问候。

4

4 回答 4

1

这行得通 - 想法是:

  • 存储页面初始加载时数组click中每个元素存在的事件数。<a>

  • 然后,每隔 500 毫秒左右,将click每个锚点上的事件长度与存储在数组中的长度进行比较

-

$(function() {
  i = 0;
  window.ahrefEvents = [];
  $('a').each(function() { 
    $(this).attr('data-id', i); //give each anchor a unique id and save it the data-id attribute. we'll then save the number of events for each link in window.ahrefEvents
    window.ahrefEvents[i] = $._data($(this)[0], 'events') == undefined ? 0 : $._data($(this)[0], 'events')['click'].length; //if no events are bound it'll return undefined, so check for that and set it to 0 if that's the case
    i++;
});


window.setInterval(function() { //check every 500ms to see if that length changed
    checkEvents();
}, 500);

window.checkEvents = function() {
    $('a').each(function() {
        index = $(this).attr('data-id');
        if ($._data($(this)[0], 'events') != undefined) {
            if (window.ahrefEvents[index] != $._data($(this)[0], 'events')['click'].length) {
                //fires when length of click events on any anchor has changed
                console.log('event bound on anchor #' + index);
            }
        }
    });
  }
});​

演示: http: //fiddle.jshell.net/CyYbA/20/show/

尝试拉起控制台并将某些东西绑定到$('#test')对象

在这里编辑小提琴:http: //jsfiddle.net/CyYbA/20/

于 2012-12-15T23:41:33.290 回答
0

如果您的 AJAX url 系统始终包含ajax在路径中,您可以构建一个基于href

var $noAjaxLinks= $('a').filter(function(){

      return ! /ajax/.test(this.href);
})
于 2012-12-15T23:06:54.537 回答
0

也许您可以使用 jquery数据函数来存储这些锚点的附加信息?

于 2012-12-15T22:59:27.827 回答
0

好的,这就是我目前所拥有的:

<ul class="nav nav-list">
    <li><a href="content.php" class="load">content via .load()</a></li>
    <li><a href="content.php" class="get">content via $.get()</a></li>
    <li><a href="content.php" class="post">content via $.post()</a></li>
    <li><a href="content.php" class="ajax">content via $.ajax()</a></li>
    <li><a href="content.php" class="">content 2 without ajax()</a></li>
</ul>

一些jQuery事件绑定

$('a.load').click(function(){
    $("#container").loader().load($(this).attr('href'));
    return false;
});
$('a.get').click(function(){
    $.get($(this).attr('href'), function(d){
        $('#container').html(d);
    });
    return false;
});

我有很多锚点,一个没有 ajax,另一个有不同的 ajax 调用,所以这就是我期望在页面中找到的。我的代码必须捕获所有这些并评估哪个没有 ajax 调用来处理它

这是代码。

//looking just for one anchor
$('a').each(function(idx, obj){
    var events = $._data(this,'events');
    if (typeof events != "undefined" && "click" in events) {
        for (i in events.click) {
            if (typeof events.click[i].handler != "undefined") {
                 var f = events.click[i].handler.toString();
                 if ((/\$(\(.*\))?\.(load|ajax|get|post)\(/).exec(f)) {
                    console.log('obj '+$(this).text()+' : with ajax.');
                    //this is where i'm gonna deal with this regular http anchor...
                 }
            }
        }
    }
});

希望这可以帮助另一个有同样问题的人。问候。

于 2012-12-16T05:09:22.623 回答