Jquery解绑无效
Jquery unbinding doesn't work
首先 - 我已经在 Whosebug 上看到 许多与使用 jQuery 解除绑定相关的问题,但我没有找不到可以解决我的具体情况的答案。我可能错过了一些东西 - 请随时将我引导至已发布的相关问题/答案 - 谢谢!
我无法理解为什么 event/handler 解除绑定不起作用。
我使用的是 Wordpress 4.4(虽然我猜 Wordpress 与这里无关),Firefox 42,jQuery 1.11.3。
我的 .html 和 .js 文件的相关部分 - 这是 html 部分:
<div class="py2web-diag-row1-col2">
<ul class="tabs">
<li> <a class="sol-show" target="<?php echo($id); ?>">Show solution</a> </li>
<li><a class="sol-hide" target="<?php echo($id); ?>" disabled>Hide solution</a></li>
</ul>
</div>
scripts.js 文件中的相关部分:
jQuery(".sol-hide").click(function() {
// Get id of the corresponding problem solution
id = this.attributes["target"].value;
// Show (unhide) solution div element with target attribute of the current problem
sel = '.p2w-solution[target="' + id + '"]';
jQuery(sel).css("visibility", "hidden");
// Deactivate hide-sol and activate show-sol
sel = '.sol-hide[target="' + id + '"]';
jQuery(sel).attr("disabled", false);
this.setAttribute("disabled", true);
// Activate py2web-s internal events (show moves when clicking on board)
sel = '.p2w-diagram[id="' + id + '"] .p2w-nav-fwd';
//jQuery(sel).off("click");
jQuery(sel).unbind("click");
sel = '.p2w-diagram[id="' + id + '"] .p2w-nav-bwd';
//jQuery(sel).off("click");
jQuery(sel).unbind("click");
});
.p2w-nav-fwd(bwd) 元素的点击事件处理程序定义在另一个js文件中,如下:
jQuery(".p2w-nav-fwd").bind("click", Py2Web.navigateForward);
jQuery(".p2w-nav-bwd").bind("click", Py2Web.navigateBackward);
下面一点,在 Py2Web 定义中:
navigateForward: function(L) {
L.preventDefault();
C(jQuery('.p2w-solution[target="' + jQuery(this).parent().attr("id") + '"]').children(".active").nextAll("a").first())
},
navigateBackward: function(L) {
L.preventDefault();
C(jQuery('.p2w-solution[target="' + jQuery(this).parent().attr("id") + '"]').children(".active").prevAll("a").first())
}
因此,通过单击锚点“.sol-show”,即“.sol-hide”,.p2w-nav-fwd 和 .p2w-nav-bwd 的 "click" 事件处理程序元素应该被启用(绑定),即禁用(解除绑定)。但是,解除绑定根本行不通。
希望我已经提供了所有相关信息,如有需要请追问。
感谢任何帮助。
您确定选择器正在运行并找到元素吗?
sel = '.p2w-solution[target="' + id + '"]';
此外,我会使用 "On" 和 "Off" 方法,而不是单击和绑定方法,因为我之前在使用 "click" 和 "unbind" 时遇到过问题,我明白了你在用什么。
所以,你可以使用这样的东西:
jQuery(".sol-hide").on('click', function () {
sel = '.p2w-solution[target="' + id + '"]';
...
jQuery(sel).off('click');
});
我会尝试一下,看看会发生什么。
我解决了问题:在 Wordpress 中,我正在加载我的本地版本 jQuery,而不是 Wordpress 的默认版本 - 但默认已加载 after local - 现在我改变了加载顺序,所以 我的所有脚本只在 jQuery 之后加载 - 而且它工作正常......我应该早点意识到这一点。感谢您的帮助,很抱歉耽误您的时间。
首先 - 我已经在 Whosebug 上看到 许多与使用 jQuery 解除绑定相关的问题,但我没有找不到可以解决我的具体情况的答案。我可能错过了一些东西 - 请随时将我引导至已发布的相关问题/答案 - 谢谢!
我无法理解为什么 event/handler 解除绑定不起作用。
我使用的是 Wordpress 4.4(虽然我猜 Wordpress 与这里无关),Firefox 42,jQuery 1.11.3。
我的 .html 和 .js 文件的相关部分 - 这是 html 部分:
<div class="py2web-diag-row1-col2">
<ul class="tabs">
<li> <a class="sol-show" target="<?php echo($id); ?>">Show solution</a> </li>
<li><a class="sol-hide" target="<?php echo($id); ?>" disabled>Hide solution</a></li>
</ul>
</div>
scripts.js 文件中的相关部分:
jQuery(".sol-hide").click(function() {
// Get id of the corresponding problem solution
id = this.attributes["target"].value;
// Show (unhide) solution div element with target attribute of the current problem
sel = '.p2w-solution[target="' + id + '"]';
jQuery(sel).css("visibility", "hidden");
// Deactivate hide-sol and activate show-sol
sel = '.sol-hide[target="' + id + '"]';
jQuery(sel).attr("disabled", false);
this.setAttribute("disabled", true);
// Activate py2web-s internal events (show moves when clicking on board)
sel = '.p2w-diagram[id="' + id + '"] .p2w-nav-fwd';
//jQuery(sel).off("click");
jQuery(sel).unbind("click");
sel = '.p2w-diagram[id="' + id + '"] .p2w-nav-bwd';
//jQuery(sel).off("click");
jQuery(sel).unbind("click");
});
.p2w-nav-fwd(bwd) 元素的点击事件处理程序定义在另一个js文件中,如下:
jQuery(".p2w-nav-fwd").bind("click", Py2Web.navigateForward);
jQuery(".p2w-nav-bwd").bind("click", Py2Web.navigateBackward);
下面一点,在 Py2Web 定义中:
navigateForward: function(L) {
L.preventDefault();
C(jQuery('.p2w-solution[target="' + jQuery(this).parent().attr("id") + '"]').children(".active").nextAll("a").first())
},
navigateBackward: function(L) {
L.preventDefault();
C(jQuery('.p2w-solution[target="' + jQuery(this).parent().attr("id") + '"]').children(".active").prevAll("a").first())
}
因此,通过单击锚点“.sol-show”,即“.sol-hide”,.p2w-nav-fwd 和 .p2w-nav-bwd 的 "click" 事件处理程序元素应该被启用(绑定),即禁用(解除绑定)。但是,解除绑定根本行不通。
希望我已经提供了所有相关信息,如有需要请追问。
感谢任何帮助。
您确定选择器正在运行并找到元素吗?
sel = '.p2w-solution[target="' + id + '"]';
此外,我会使用 "On" 和 "Off" 方法,而不是单击和绑定方法,因为我之前在使用 "click" 和 "unbind" 时遇到过问题,我明白了你在用什么。
所以,你可以使用这样的东西:
jQuery(".sol-hide").on('click', function () {
sel = '.p2w-solution[target="' + id + '"]';
...
jQuery(sel).off('click');
});
我会尝试一下,看看会发生什么。
我解决了问题:在 Wordpress 中,我正在加载我的本地版本 jQuery,而不是 Wordpress 的默认版本 - 但默认已加载 after local - 现在我改变了加载顺序,所以 我的所有脚本只在 jQuery 之后加载 - 而且它工作正常......我应该早点意识到这一点。感谢您的帮助,很抱歉耽误您的时间。