【问题标题】:jquery function doesn't work after ajax call backajax回调后jquery函数不起作用
【发布时间】:2012-11-27 13:01:44
【问题描述】:

我正在使用 asp.net 3.5

我有一个在“悬停”事件上运行良好的 jquery 函数。

浏览器刷新某些 div 后出现问题 使用 ajax 调用。

从那时起浏览器忽略 悬停事件并且不调用 jquery 函数。 刷新页面后才恢复正常。

* 进行我正在使用的 ajax 调用

<asp:UpdatePanel ID="UpdatePanel4"  runat="server" UpdateMode="Always">
         <ContentTemplate runat="server">
            <div id='map' runat="server"></div>                        
          </ContentTemplate>
 </asp:UpdatePanel>

--这是jquery函数--

$(function() {
  $('a.trigger').hover(function() {

    var index = $(".trigger").index(this);

  var pop=document.getElementById("pop_up");

  var place=document.getElementsByClassName('place')[index ];

  var car_id=document.getElementsByClassName('car_id')[index];
  var enter_time=document.getElementsByClassName('time')[index ];
  pop.innerHTML="Park At: "+place.innerHTML+"</br>Car Id:"+car_id.innerHTML+"</br>Enter At:"+enter_time.innerHTML;

    $('div#pop_up').show();
  }, function() {
    $('div#pop_up').hide();
  });
});

--这是ajax回调后没有响应的div--

<div id="pop_up" runat="server">
    <p  id='who_parks_here' runat="server"></p>
</div>

【问题讨论】:

  • 尝试用$('a.trigger').live("hover", function() {替换$('a.trigger').hover(function() {
  • onlive 会有所帮助
  • .live() 函数已被弃用数月,没有人 应该编写使用它的新代码。使用.on() (jQuery 1.7+) 或.delegate()

标签: jquery asp.net ajax updatepanel


【解决方案1】:

您必须使用.on(),因为当在 AJAX 面板中收到新的 HTML 时,ASP.NET AJAX 调用会删除已附加的事件处理程序。

$(function() {
    $(document).on('hover', 'a.trigger', function() {

        var index = $(".trigger").index(this);

        var pop = document.getElementById("pop_up");

        var place = document.getElementsByClassName('place')[index];

        var car_id = document.getElementsByClassName('car_id')[index];
        var enter_time = document.getElementsByClassName('time')[index];
        pop.innerHTML = "Park At: " + place.innerHTML + "</br>Car Id:" + car_id.innerHTML + "</br>Enter At:" + enter_time.innerHTML;

        $('div#pop_up').show();
    }, function() {
        $('div#pop_up').hide();
    });
});

【讨论】:

  • 我认为您需要在使用.on() 时将单独的处理程序绑定到mouseentermouseleave 事件,因为hover 不是实际事件; .hover() 函数只是 jQuery 提供的一种快捷方式,用于将处理程序绑定到这两个事件。
  • 使用 $('#pop_up') 比使用 $(document) 更好
  • @Jack:将鼠标悬停在链接上会显示 ID 为 pop_up&lt;div&gt; 元素,所以我不认为这些链接 在该元素内部。如果没有看到实际的 HTML,就绝对无法知道应该使用什么元素来代替 document
  • @AnthonyGrist 嗯,没错,原来的选择器也不包含 :)
猜你喜欢
  • 1970-01-01
  • 2014-01-24
  • 2014-07-08
  • 2012-05-12
  • 2016-02-18
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多