如果 removeClass 不影响源代码,那又有什么意义呢?
If removeClass doesn't affect source code, what's the point?
我有一堆具有这种模式的表单:
<form action="/go/special" method="POST" target="_blank">
<input name="a" type="hidden" value="something"/>
<input type="submit" class="general effect" value="click me"></form>
对于每个在其操作中具有special
的表单,我想使用以下 jQuery 代码删除 effect
类:
<script src="/js/colorbox.js"></script>
<script>
jQuery(function($) {
// find all forms that have "special" in the action, find their input, and add the class
$('form[action*="special"] input[type="submit"]').removeClass('effect');
});
</script>
编辑:
effect
类代码:
(jQuery, document, window), $(document).ready(function() {
$(".effect").click(function(t) {
t.preventDefault();
var e = $(this).closest("form");
return $.colorbox({
href: e.attr("action"),
transition: "elastic",
overlayClose: !1,
maxWidth: $("html").hasClass("ie7") ? "45%" : "false",
opacity: .8,
data: {
ago: e.find('input[name="a"]').val(),
}
}), !1
})
链接到 Colorbox 代码的其余部分:
https://github.com/jackmoore/colorbox/blob/master/jquery.colorbox.js
effect
类是一个 Colorbox 插件。 如果存在,窗体将在与模式窗口相同的窗口中打开。如果没有,表单将在新选项卡中打开。
该脚本确实删除了 effect
类,但我可以看到只有在我使用控制台检查元素时才将其删除。
但是,源代码不受影响,并且仍然显示它包含effect
类。
因此,当我提交表单时,它将使用 colorbox 插件并打开一个模态窗口,而不是新选项卡。
首先使用removeClass
有什么意义吗?
有什么解决方法吗?
据我所知,问题是您阻止了提交单击操作的默认处理(即提交表单),但从您的描述来看,您实际上希望发生默认操作。这有点令人困惑,但我认为您希望动态更改行为,具体取决于提交按钮上是否有该类。
这是事件委派的完美案例。从某种意义上说,事件委托是一种将事件处理程序附加到现在或将来与条件匹配的元素的方法,其中条件将在事件发生时而不是在附加时进行评估。
我假设您要附加单击处理程序以提交具有任何form
标签中包含的effect
类的按钮,并且form
标签在附加(页面加载)时已经存在。
$(function() {
$("form").on("click", "input[type='submit'].effect", function(t) {
t.preventDefault();
var e = $(this).closest("form");
return $.colorbox({
href: e.attr("action"),
transition: "elastic",
overlayClose: !1,
maxWidth: $("html").hasClass("ie7") ? "45%" : "false",
opacity: .8,
data: {
ago: e.find('input[name="a"]').val(),
}
}), !1
});
});
这在引擎盖下的作用:
- 查找所有
form
元素
将处理程序附加到 - 每个处理程序
click
并向其添加input[type='submit'].effect
选择器 - 当单击事件在 DOM 树中向上冒泡并到达
form
元素时,将检查其源以查看它是否与该附加选择器匹配。 - 如果匹配,则执行事件处理程序。它会阻止默认操作(提交表单)并改为启动颜色框。
- 如果不匹配,它将继续冒泡,最终触发默认操作(表单提交)。
你说:
该脚本确实删除了效果类,但只有在我使用控制台检查元素时,我才能看到它被删除。
但是,源代码不受影响,并且仍然显示它包含效果类。
正在删除该类。这就是为什么在检查元素时可以看到它被删除的原因。我猜当你说"源代码"时,你指的是右键单击选项"查看源代码"。 当您查看源代码时,您正在查看浏览器在运行任何 JavaScript 之前加载的原始代码。因此,javascript 对页面所做的任何修改都不会显示在查看源代码选项中。您只会在浏览器的开发工具中看到更改。
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 全局变量和全局对象的属性之间有什么区别吗
- 打破承诺链的好方法是什么
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Javascript中的空白是什么
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 在ember/handlers中使用value和valueBinding有什么区别
- removeClass函数没有'工作不正常
- 什么'在webpack外部设置中,reactDom和reactDom不同
- 在JavaScript中拆分日期字符串的更好方法是什么
- 为什么$.brower被弃用?还有什么更好的替代方案
- 什么是&&在没有if的行中的变量之间
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- DOM元素和angular元素之间的主要区别是什么
- javascript导入的最佳实践是什么
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 什么是“;右“;使用addClass/delay/removeClass的方法
- 如果 removeClass 不影响源代码,那又有什么意义呢?