jQuery 事件和函数触发器出现问题
Trouble with jQuery events and function triggers
让我解释一下问题所在。我有两个函数:compute(); 和 discount_compute();。当页面第一次加载时,两个函数都会执行一次(好的,因为 discount_compute() 是计算的一部分,所以它总是在 compute() 执行时运行)。当我打开 #autobid 面板(最初设置为显示:无)时,由于 $('#autobid').on('click', function()),函数discount_compute运行 1 次,但随后由于"[数据滑块]").on('change.fndtn.slider'),它也运行了 2 次。顺便说一句,每次关闭或打开此自动出价面板时,滑块都会再次初始化。我只希望 discount_compute() 在打开 #autobid 面板时运行一次。有什么想法吗?
function compute() {
//first function
};
function discount_compute() {
//second function
};
$(document).ready(function($) {
$('.price').change(compute).change();
$('#autobid').on('click', function() {
if ($(this).is(':checked')) {
$('#autobid-panel').removeClass("hide");
$(document).foundation('slider', 'reflow');
discount_compute();
} else {
$('#autobid-panel').addClass("hide");
$(document).foundation('slider', 'reflow');
}
});
$('#discount').on('change', function(){
var value = $(this).val();
$('.range-slider').foundation('slider', 'set_value', value);
discount_compute();
});
$('[data-slider]').on('change.fndtn.slider', function(){
discount_compute();
});
});
感谢您的帮助!
你并没有真正解释数据滑块的推理,或者如果你不想运行它,为什么你甚至在那里调用discount_compute();
。
你可以做的一个肮脏的黑客是这样的:
function compute() {
//first function
};
function discount_compute() {
//second function
};
var harRun=false;
$(document).ready(function($) {
$('.price').change(compute).change();
$('#autobid').on('click', function() {
if ($(this).is(':checked')) {
$('#autobid-panel').removeClass("hide");
$(document).foundation('slider', 'reflow');
if(hasRun != true) {discount_compute(); hasRun=true;}
} else {
$('#autobid-panel').addClass("hide");
$(document).foundation('slider', 'reflow');
}
});
$('#discount').on('change', function(){
var value = $(this).val();
$('.range-slider').foundation('slider', 'set_value', value);
discount_compute();
});
$('[data-slider]').on('change.fndtn.slider', function(){
if(hasRun != true) {discount_compute();}
});
});
这样,一旦hasRun
设置为 true,您就不再调用 discount_compute()
。
不幸的是,$(document).foundation('slider', 'reflow');
触发了一个change
事件,所以没有任何好方法。
一种方法是在reflow
之前off
事件,然后直接on
:-
function compute() {
//first function
};
function discount_compute() {
//second function
};
$(document).ready(function($) {
$('.price').change(compute).change();
$('#autobid').on('click', function() {
if ($(this).is(':checked')) {
$('#autobid-panel').removeClass("hide");
$('[data-slider]').off('change.fndtn.slider', discount_compute);
$(document).foundation('slider', 'reflow');
$('[data-slider]').on('change.fndtn.slider', discount_compute);
discount_compute();
} else {
$('#autobid-panel').addClass("hide");
$(document).foundation('slider', 'reflow');
}
});
$('#discount').on('change', function(){
var value = $(this).val();
$('.range-slider').foundation('slider', 'set_value', value);
discount_compute();
});
});
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- TableExport jquery插件:文件名和扩展名问题
- JavaScript Pub/Sub属性访问问题
- JavaScript异步问题
- 悬停功能触发器
- 如何解决Yii中的页面刷新问题
- Safari(Mac OS)上的jQuery平滑滚动问题
- jqGrid树网格问题
- 使用正则表达式评估电子邮件地址时出现性能问题
- 我有一个严重的问题与CRM的触发器,正在开发与GAS
- jQuery 事件和函数触发器出现问题
- Javascript复选框已选中触发器问题
- DOM加载后定义的触发器事件-JIRA打开新的问题模式
- 关于:input元素的jQuery委托/触发器问题