热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

简单的Testpage中奇怪的JavascriptBug(jQuery)

我正在编写Mediawiki扩展程序.我实际上处于非常早期阶段;).你可以在这里找到代码(好吧,我只能提交一个链接,所以想象一下github网址)/eugenkiss/discussion

我正在编写Mediawiki扩展程序.我实际上处于非常早期阶段;).你可以在这里找到代码(好吧,我只能提交一个链接,所以想象一下github网址)/ eugenkiss / discussion-extension

我有一个奇怪的jQuery问题,即使使用firebug并尝试调试我的代码,我也无法解决.我已经上传了当前的代码和示例:http://jsfiddle.net/NMpU5/

尝试打开讨论并点击至少两个“回复”链接.然后单击出现的第一个表单的取消按钮.我不知道为什么,但当你点击取消按钮时,另一个表格将被关闭而不是所需的表格.

您也可以改变这一点.例如,打开两个表单并关闭最后一个表单.起初它似乎工作.但是,当您尝试关闭其他表单(通过单击取消)时,它不会消失.但是,事件是由firebug所示触发的.有时,当我在那之后点击另一个回复锚点时,将会打开尽可能多的表单,因为我点击了另一个表单中看似无效的取消按钮.

那么,对于我想要的扩展,我当然可以将打开的表单的存在限制为一个 – 为什么还需要打开两个或更多?但我只想找到该死的虫子,因为我已经投入了大量时间来寻找它!对你来说这是一个宝贵的错误,你知道;)

顺便说一下,我正在使用jQuery 1.4.2

Javascript的


$(document).ready(function() {
// Hide the discussion bodys per default
$(".discussion").addClass("closed")
.children(".discussion-body").hide();
// Register two custom events for the individual discussion divs
// "open" & "close" in order to make the discussion bodys
// collapsable and be able to toggle the events by clicking
// the "discussion-header-button" anchor
$(".discussion")
.bind("open", function(e) {
if(!$(this).hasClass("opened")) {
$(this).children(".discussion-body").slideDown();
$(this).find(".discussion-header-button").html("[-]");
$(this).addClass("opened");
$(this).removeClass("closed");
}
})
.bind("close", function(e) {
if(!$(this).hasClass("closed")) {
$(this).children(".discussion-body").slideUp();
$(this).find(".discussion-header-button").html("[+]");
$(this).addClass("closed");
$(this).removeClass("opened");
}
})
.find(".discussion-header-button").click(function(){
relatedDiscussion = $(this).parents(".discussion");
if(relatedDiscussion.hasClass("closed")) {
relatedDiscussion.trigger("open");
}
else if(relatedDiscussion.hasClass("opened")) {
relatedDiscussion.trigger("close");
}
});
// Register custom "showForm" & "destroyForm" events on posts
// in order to make the "Reply" button work
// TODO: Maybe add "preview" & "submit"
$(".discussion-body .post")
.bind({
showForm: function(){
post = $(this);
postBody = post.find(".post-body").first();
postHeader = post.find(".post-header").first();
postBody.append(postCommentFormHtml);
replyLink = postHeader.find(".reply");
replyLink.unbind();
form = postBody.find(".post-comment-form");
form.slideDown();
// create actions for the form buttons
form.find(".cancel").click(function(){post.triggerHandler("destroyForm");
});
form.find(".preview").click(function(){// Hier muss mit Ajax und der Datenbank gespielt// werden um ein preview erstellen zu k?nnen
});
form.find(".submit").click(function(){// Hier muss mit Ajax und der Datenbank gespielt// werden um den Post abschicken zu k?nnen
});
},
destroyForm: function(){
post = $(this);
postBody = post.find(".post-body").first();
postHeader = post.find(".post-header").first();
replyLink = postHeader.find(".reply");
replyLink.click(replyAction);
form = postBody.find(".post-comment-form");
form.slideUp(function(){ $(this).remove();
});
}
});
//$(".discussion-post-comment").click(createPostCommentForm);
$(".discussion .reply").click(replyAction);
function replyAction(event){
// Note: It is important to use triggerHandler instead of trigger
// otherwise the "showForm" event of all parents is triggered
// recursively (bubbling) and this is not desired
event.preventDefault();
relatedPost = $(this).parents(".post").first();
relatedPost.triggerHandler("showForm");
}
});
postCommentFormHtml = "\


\
\
\

\
\
\
\
\
";?

HTML




[+]
Diskussion: 3 Kommentar(e)
Post Comment




Eugen
2010-02-25 12:32:30
Reply
Edit
Delete


Ich denke das sollte anders sein!



Markus
2010-02-25 12:32:31
Reply
Edit
Delete


Ich denke nicht





Jan
2010-03-25 12:32:30
Reply
Edit
Delete


Mal was ganz anderes: Denkt ihr das selbe was ich denke?




编辑:
我想补充说,将id更改为类并没有帮助.另外,如果这有助于你:我发现(使用Firebug)“post”(因此“postbody”)变量(在“destroyForm”事件中)实际上指向错误的帖子,因此删除了错误的表单.但是,为什么post变量首先指向错误的帖子

EDIT2:
将所有ID更改为类http://jsfiddle.net/NMpU5/1/

解决方法:

它看起来好像你的事件处理函数中的许多变量(特别是“post”和“relatedDiscussion”)在每个函数中都没有用“var”声明.我试图弄明白可能会做些什么,但我感到困惑.然而,当你没有声明你的局部变量时,它们就是全局变量.这意味着将“post”设置为等于某个新值的每个函数都会更改“post”在所有其他可能处于活动状态的函数所使用的值.

将其更改为

var post = $(this);

等等


推荐阅读
  • 作为一名 Ember.js 新手,了解如何在路由和模型中正确加载 JSON 数据是至关重要的。本文将探讨两者之间的差异,并提供实用的建议。 ... [详细]
  • 本文详细介绍了如何在 Windows 环境下使用 node-gyp 工具进行 Node.js 本地扩展的编译和配置,涵盖从环境搭建到代码实现的全过程。 ... [详细]
  • 解决FCKeditor应用主题后上传问题及优化配置
    本文介绍了在Freetextbox收费后选择FCKeditor作为替代方案时遇到的上传问题及其解决方案。通过调整配置文件和调试工具,最终解决了上传失败的问题,并对相关配置进行了优化。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 本文详细介绍了在企业级项目中如何优化 Webpack 配置,特别是在 React 移动端项目中的最佳实践。涵盖资源压缩、代码分割、构建范围缩小、缓存机制以及性能优化等多个方面。 ... [详细]
  • 创建项目:Visual Studio Online 入门指南
    本文介绍如何使用微软的 Visual Studio Online(VSO)创建和管理开发项目。作为一款基于云计算的开发平台,VSO 提供了丰富的工具和服务,简化了项目的配置和部署流程。 ... [详细]
  • 自 Node.js 6.3 版本起,调试功能已内置在核心模块中,无需额外安装 node-inspector 等工具。通过简单的命令即可启动调试模式,并利用 Chrome 浏览器进行高效的代码调试。 ... [详细]
  • 在项目部署后,Node.js 进程可能会遇到不可预见的错误并崩溃。为了及时通知开发人员进行问题排查,我们可以利用 nodemailer 插件来发送邮件提醒。本文将详细介绍如何配置和使用 nodemailer 实现这一功能。 ... [详细]
  • 探讨如何正确使用 Fetch API 进行参数传递,分析不同写法的差异及解决方案。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • 本文介绍如何在 Cocos Creator 中创建一个 JavaScript 文件,并通过自定义方法监听和获取 PageView 组件当前翻页的索引。详细描述了代码实现及绑定步骤。 ... [详细]
  • TechStride 网站
    TechStride 成立于2014年初,致力于互联网前沿技术、产品创意及创业内容的聚合、搜索、学习与展示。我们旨在为互联网从业者提供更高效的新技术搜索、学习、分享和产品推广平台。 ... [详细]
  • 本文详细介绍了 Flink 和 YARN 的交互机制。YARN 是 Hadoop 生态系统中的资源管理组件,类似于 Spark on YARN 的配置方式。我们将基于官方文档,深入探讨如何在 YARN 上部署和运行 Flink 任务。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • Windows 7 64位系统下Redis的安装与PHP Redis扩展配置
    本文详细介绍了在Windows 7 64位操作系统中安装Redis以及配置PHP Redis扩展的方法,包括下载、安装和基本使用步骤。适合对Redis和PHP集成感兴趣的开发人员参考。 ... [详细]
author-avatar
用户fkise9sswv
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有