gpt4 book ai didi

javascript - 在 JQuery 中的事件处理程序之间共享公共(public)变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:18:31 25 4
gpt4 key购买 nike

我有以下 index.html,我有两个部分第 1 部分和第 2 部分,如屏幕截图所示

enter image description here

索引.html

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<!--START: Adding of javaScript library -->
<script type="text/javascript" src="/jquery.min.js"></script>
<script type="text/javascript" src="myscript.js"></script>
<!--END: Adding of javaScript library-->
<script>
jQuery(document).ready(function() {
jQuery('.mySectionOne').updateCommonVar({commonVar:1});
jQuery('.mySectionTwo').updateCommonVar({commonVar:1});
});
</script>

</head>

<body>
<p>Section 1:</p>
<div class="mySectionOne">
<button class="add">add</button>
<button class="sub">sub</button>
<button class="show">show</button>
<p>The value of Common var in section one is:<span class="showVal"></span><p>
</div>

<p>Section 2:</p>
<div class="mySectionTwo">
<button class="add">add</button>
<button class="sub">sub</button>
<button class="show">show</button>
<p>The value of Common var in section two is:<span class="showVal"></span><p>
</div>
</body>

在 Index.html 中,我使用自己的自定义 jQuery 插件“updateCommonVar”,插件的定义存在于 myscript.js 中

我的脚本.js

(function( $ ) {
$.fn.updateCommonVar = function (options) {
var defaults= {
commonVar:0,
}
var ParameterObject= $.extend({}, defaults, options);
this.each(function() {
$(this).find("button.add").bind("click", {commonVar:ParameterObject.commonVar},fnAddOne);
$(this).find("button.sub").bind("click", {commonVar:ParameterObject.commonVar},fnSubOne);
$(this).find("button.show").bind("click",{commonVar:ParameterObject.commonVar},fnShow);
});
return this;
};

function fnAddOne(e){
e.data.commonVar++;
}
function fnSubOne(e){
e.data.commonVar--;
}
function fnShow(e){
$(this).parent().find('.showVal').html(e.data.commonVar);
}


})( jQuery );

我将变量 commonVar 的值作为“1”从 index.html 传递给这两个部分,我为每个按钮添加子绑定(bind)事件处理程序并在插件定义中显示,这里我想要的是

单击添加按钮时:我传递给 commonVar 的变量将增加 1。单击子按钮时:我传递给 commonVar 的变量减 1。单击添加按钮时:我传递给 commonVar 的变量将显示在带有“showVal”类的 span 标记中。

首先,我单击了添加按钮,然后单击了显示按钮,但我得到的 commonVar 值仍然为 1 而不是预期值 2。我不确定在事件处理程序之间传递公共(public)变量。请帮助我。在此先感谢您的帮助。

我期望第 2 部分有相同的行为,但我仍然得到第 1 部分的结果注意:第 2 部分独立于第 1 部分。

相同的 fiddle :http://jsfiddle.net/shmdhussain/PXYAh/1/

最佳答案

您需要将整个对象传递给您的点击处理函数,我将它作为一个名为 ref 的参数作为对对象的引用。

JSFIDDLE

(function( $ ) {
$.fn.updateCommonVar = function (options) {
var defaults= {
commonVar:0,
}
var ParameterObject= $.extend({}, defaults, options);
this.each(function() {
$(this).find("button.add").bind("click", {ref:ParameterObject},fnAddOne);
$(this).find("button.sub").bind("click", {ref:ParameterObject},fnSubOne);
$(this).find("button.show").bind("click",{ref:ParameterObject},fnShow);
});
return this;
};

function fnAddOne(e){
console.log(e.data);
e.data.ref.commonVar++;
}
function fnSubOne(e){
e.data.ref.commonVar--;
}
function fnShow(e){
$(this).parent().find('.showVal').html(e.data.ref.commonVar);
}


})( jQuery );
jQuery(document).ready(function() {
jQuery('.mySectionOne').updateCommonVar({commonVar:1});
jQuery('.mySectionTwo').updateCommonVar({commonVar:1});
});

关于javascript - 在 JQuery 中的事件处理程序之间共享公共(public)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18517579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com