我有这个:
$(document).on("click", ".prev", function(){
$(this).closest("div").find(".slider").animate({
"left": "+=450px"
}, 800, "easeInOutBack");
return false;
});
这在新元素添加到 DOM 时有效,但不适用于 DOM 中已有的元素。
当我这样做时:
$(".prev").on("click", function(){
$(this).closest("div").find(".slider").animate({
"left": "+=450px"
}, 800, "easeInOutBack");
return false;
});
它适用于 DOM 中的元素,但不适用于添加到 DOM 中的新元素。有没有一种方法可以让我在不需要编写 2 次或调用另一个函数的情况下为两者工作?
这是一个屏幕截图:
所以,下面是对其工作原理的更深入的描述。
<div id="simple-pevs" style="padding-right: 20px;">
<?php require_once __DIR__ . "/data/get/PEVSection.php"; ?>
</div>
然后当有人想要添加另一个部分时,他们单击添加按钮,然后运行此代码:
$(".add-another-pev").click(function(){
$.get("./data/get/PEVSection.php?pev="+pevGroup, function(data){
$("#simple-pevs").append(data);
});
pevGroup++;
return false;
});
如您所见,它正在调用预加载到 php.ini 文件中的同一个文件。新的(以及添加的任何其他附加的)与点击事件一起工作,而第一个没有
@ArunPJohny
console.log($(".prev")); 添加新元素后:
[a.prev, a.prev, prevObject: b.fn.b.init[1], context: document, selector: ".prev", jquery: "1.9.1", constructor: function…]
0: a.prev
1: a.prev
context: #document
length: 2
prevObject: b.fn.b.init[1]
selector: ".prev"
__proto__: Object[0]
最佳答案
下面是我从jquery官网复制过来的内容,解释的很清楚: 事件处理程序只绑定(bind)到当前选中的元素;它们必须在您的代码调用 .on() 时存在于页面上。 为确保元素存在并且可以被选择,请在文档就绪处理程序中为 HTML 中的元素执行事件绑定(bind)页面上的标记。 如果将新的 HTML 注入(inject)页面,请在将新的 HTML 放入页面后选择元素并附加事件处理程序。或者,使用委托(delegate)事件附加事件处理程序,如下所述。
委托(delegate)事件的优点是它们可以处理来自稍后添加到文档的后代元素的事件。通过选择在附加委托(delegate)事件处理程序时保证存在的元素,您可以使用委托(delegate)事件来避免频繁附加和删除事件处理程序的需要。该元素可以是模型- View - Controller 设计中 View 的容器元素,例如,如果事件处理程序想要监视文档中的所有冒泡事件,则可以是文档。文档元素在加载任何其他 HTML 之前位于文档的头部,因此无需等待文档准备就绪即可安全地在此处附加事件。
除了它们能够处理尚未创建的后代元素上的事件之外,委托(delegate)事件的另一个优势是当必须监视许多元素时它们可能会大大降低开销。在 tbody 中有 1,000 行的数据表上,此示例将处理程序附加到 1,000 个元素:
$("#dataTable tbody tr").on("click", function(event){
alert($(this).text());
});
委托(delegate)事件方法仅将事件处理程序附加到一个元素,即 tbody,并且事件只需要向上冒泡一个级别(从单击的 tr 到 tbody):
$("#dataTable tbody").on("click", "tr", function(event){
alert($(this).text());
});
注意:委托(delegate)事件不适用于 SVG。
关于javascript - jQuery on() 不适用于已添加的 DOM 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15298909/
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我有一个ModularSinatra应用程序,我正在尝试将Bootstrap添加到应用程序中。get'/bootstrap/application.css'doless:"bootstrap/bootstrap"end我在views/bootstrap中有所有less文件,包括bootstrap.less。我收到这个错误:Less::ParseErrorat/bootstrap/application.css'reset.less'wasn'tfound.Bootstrap.less的第一行是://CSSReset@import"reset.less";我尝试了所有不同的路径格式,但它
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
当谈到运行时自省(introspection)和动态代码生成时,我认为ruby没有任何竞争对手,可能除了一些lisp方言。前几天,我正在做一些代码练习来探索ruby的动态功能,我开始想知道如何向现有对象添加方法。以下是我能想到的3种方法:obj=Object.new#addamethoddirectlydefobj.new_method...end#addamethodindirectlywiththesingletonclassclass这只是冰山一角,因为我还没有探索instance_eval、module_eval和define_method的各种组合。是否有在线/离线资
我注意到类定义,如果我打开classMyClass,并在不覆盖的情况下添加一些东西我仍然得到了之前定义的原始方法。添加的新语句扩充了现有语句。但是对于方法定义,我仍然想要与类定义相同的行为,但是当我打开defmy_method时似乎,def中的现有语句和end被覆盖了,我需要重写一遍。那么有什么方法可以使方法定义的行为与定义相同,类似于super,但不一定是子类? 最佳答案 我想您正在寻找alias_method:classAalias_method:old_func,:funcdeffuncold_func#similartoca
我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司
当我使用has_one时,它工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_