【问题标题】:jquery keypress not working after load?加载后jquery按键不起作用?
【发布时间】:2013-01-14 16:35:55
【问题描述】:

我正在尝试使用键盘进行导航。我用 jquery load() 函数加载新内容,但它只在第一次加载脚本时工作,我听说你应该使用 jquery live() 函数来让它加载每个页面,但它没有. 这是按键功能:

$(document).live("keydown", function(e){
        if (e.keyCode == 49) {
            $('.next').click();
        }
        if (e.keyCode == 50) {
            $('.prev').click();
        }
    });

此代码位于加载的每个页面中。但只在第一次使用该页面时有效,单击后无效。为什么? .next 和 .prev 的作用:

$('.next').click(function(event) {
        event.preventDefault();
        var href = this.href;
        $('.loading').fadeIn();
        $('#content').load(href, function(){ 
            $('.loading').fadeOut();
        });
    });

然而,在使用鼠标加载后,按 .next 和 .prev 确实有效。只需按一次按键即可。

这是 HTML 结构:

<div id="content">
 Image
 <div class="nav">
  <a href="page.php?id=1" class="prev">Prev</a>
  <a href="page.php?id=2" class="next">Next</a>
 </div>
</div>

【问题讨论】:

  • 点击.next.prev有什么作用?
  • 用 .next 编辑顶帖
  • 您确定浏览器没有跟踪锚点吗?地址栏中的网址是否显示page.php?id=1
  • 不,它没有,它加载下一页而不刷新浏览器窗口
  • 这个按钮$('.next')在你的动态加载的内容中吗?

标签: jquery


【解决方案1】:

看来这对你有用。

$('.next').click(function (event) {
  event.preventDefault();
  var href = this.href;
  $('.loading').fadeIn();
  $('.main-bg').load(href, function () {
    $('.loading').fadeOut();
  });
});

由于您总是需要这两个按钮,因此您不需要动态加载它们。此外,事件的数量将随着每次点击而增加。所以只替换main-bgdiv里面的内容。

更新:

另外,我注意到,每当您更改图像时,您都会重新加载 javascript。那会产生问题。所以只在第一页添加脚本。

如果你希望每次都加载脚本,那么使用下面的代码

$(document).keydown( function(e){
        if (e.keyCode == 49) {
            $('.next').click();
        }
        if (e.keyCode == 50) {
            $('.prev').click();
        }
    });

$('.next').click(function(event) {
        event.preventDefault();
        var href = this.href;
        $('.loading').fadeIn();
        $('#content').load(href, function(){ 
            $('.loading').fadeOut();
        });
    });

【讨论】:

  • 但我确实需要替换那些按钮 href。导致href更改,这就是我重新加载整个内容的原因,但如果没有解决方案可以让这个工作正常进行,我可以围绕这个进行编程。
  • 检查我更新的答案。这是一个重大问题。每次点击都会增加事件数量。
【解决方案2】:
$(document).on("keydown", function(e){
    if (e.keyCode == 49) {
        $('.next').trigger("click");
    }
    if (e.keyCode == 50) {
        $('.prev').trigger("click");
    }
});

$(document).on('click', '.next', function() {
    var href = $(this).attr("href");
    $('.loading').fadeIn();
    $('#content').load(href, function(){ 
        $('.loading').fadeOut();
    });
    return false;
});

请检查,加载内容后#content 是唯一的...我更改了您的一些代码,但我认为没有必要。

【讨论】:

  • 这和我的情况一样,第一次工作而不是加载后,用 .next 和 .prev 更新我的原始帖子,如果这有所作为?
  • .trigger("click") 与不带参数调用的.click() 相同。来自api.jquery.com/click"在第三个变体中,当 .click() 不带参数调用时,它是 .trigger("click") 的快捷方式。"
  • 我编辑了我的答案。你是真的 j08691,我觉得它更干净。
  • 感谢您的回答,#content 应该是唯一的是什么意思?也许这可能是个问题?
  • id 必须是唯一的。您只能使用一次:w3.org/WAI/GL/WCAG20/tests/test185.html。如果你不能使用像 (".content") 这样的类或者像这样创建 id : ("#content1", "#content2")。如果您加载的页面中包含 id="content",则您的代码将无法正常工作。我不知道我是否足够清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
相关资源
最近更新 更多