-1

我的 jQuery 代码:

var menu = 0;
var link = "";
var column = 2;

jQuery( document ).ready( function($) {
$('body').css('height', $(window).height());
$('body').css('width', 32 + (230*column));

$(".button").click(function(event) {
    event.preventDefault();
    link = $(this).find('a').attr("href");

    $("#menu").css({'left':event.pageX});
    $("#menu").css({'top':event.pageY});
    $("#menu").find('#gotosite').attr("href", link);
    $("#menu").slideDown();
    menu = 1;
});

$("#zamknij_menu").click(function(event) {
    event.preventDefault();
    $("#menu").slideUp();
    menu = 0;
});

$("#zbadaj_element").click(function(event) {
    event.preventDefault();
    $("#menu").slideUp();
    menu = 0;
    $("body").append("<div class=\"column\" id=\"" + column + "\">");
    $("#" + column).html('<img src="load.gif" alt="Please Wait" /><p>Loading... Please Wait</p>');
    $("#" + column).load("robotone.php?url=" + link);

    column++;
    $("body").append("</div>");
    $('body').css('width', 32 + (230*column));
});

$("#openhelp").click(function(event) {
    $("#legend").slideToggle('slow', function() {
    // Animation complete.
  });
});
});

此脚本将带有类列的 div 附加到正文并加载到它的 php 文件中。此脚本适用于 html 文档,但不适用于此脚本添加的新列。你能帮助我吗?

4

4 回答 4

3

Sice 是动态添加的,做Event Delegation

例子:

$(document).on("eventname",'.selector', function(event,ele){
 //Your code goes here
});

http://api.jquery.com/on/

于 2013-06-15T11:11:03.560 回答
2

当您在绑定事件后向 DOM 添加新的 HTML 元素时,这些新元素将不会被绑定。 jQuery.on函数旨在解决这个问题。它的工作方式略有不同。

DOM 中的事件“冒泡”到它们的父元素(除非在代码中明确告知不要这样做,您似乎没有这样做)。因此,当您“单击”一个元素时,您还“单击”了它的父元素、该元素的父元素等等,一直到该body元素,最后是document. 因此,您还可以绑定到那些父元素以响应单击。

.on函数就是这样做的,并包含一个过滤器,仅响应来自特定选择器的父元素引发的事件。因此,您可以绑定到一个共同的父元素,而不是绑定到子元素本身。 bodydocument经常用于此目的。像这样的东西:

$(document).on('click', '.button', function () {
    // your event handling code
});

这绑定到 的 click 事件document,但仅在事件的发起者属于 class 时才响应该事件button。最终结果与绑定到 class 元素的 click 事件相同button,但在底层有两个明显的区别:

  1. 您只需在 DOM 上创建一个事件,而不是为 class 的每个元素创建一个事件button。如果您有许多元素,则会提高性能。
  2. 绑定此事件后button添加到 DOM的类的任何元素仍然受到影响。只要他们是共同父母的孩子(在这种情况下,他们是,一切都是孩子),那么他们的事件仍然会“冒泡”到那个父母。这通常被称为“延迟事件”。本质上,您可以添加所有想要的元素,它们仍然会得到响应。document
于 2013-06-15T11:14:13.273 回答
1

您需要在每个事件中添加“on”,例如,

$(".button").on('click',function(event) {
    // code
});

按照这种方式

于 2013-06-15T11:07:01.210 回答
0

$(selector).click(...)仅将 clickHandler 附加到已经存在的 domElements,您应该使用$(selector).on('click', function(){...});将处理程序也附加到稍后将插入的元素...

于 2013-06-15T11:08:28.803 回答