我有这个功能:
$(document).ready(function(){
function Fos(buttonSel, inputSel, someValue, cssProperty) {
$(buttonSel).click(function(){
var value = $(inputSel).attr("value");
$("div.editable").click(function (e) {
e.stopPropagation();
showUser(value, someValue, this.id)
var css_obj={};
css_obj[cssProperty]=value;
$(this).css(css_obj);
});
});
}
这里有三个函数写的地方:
Fos('#border_button', '#border-radius', 2, '-webkit-border-radius');
Fos('#background_color_button', '#background-color', 1, 'background-color');
Fos('#opacity_button', '#opacity', 3, 'opacity');
<input type="text" id="border-radius" value="20px">
<div id="border_button">BORDER RADIUS</div>
<input type="text" id="background-color" value="red">
<div id="background_color_button">Background</div>
<input type="text" id="opacity" value=".5">
<div id="opacity_button">Opacity</div>
<div id="2" class="defaultclass editable" style="<?php getStyle('2') ?>">
something
</div>
当您点击ID =“border_button”或“background_color_button”或“opacity_button”的DIV时 它等你点击任何DIV with class =“editable”,... $(“div.editable”)。click(function(e){...它用这些参数执行函数。
我只需要一个只允许一次启用参数的ONE功能的修复。
目前,当您点击ID为“border_button”或“background_color_button”的所有三个div,或者对class =“editable”的div上的“opacity_button”AND THEN时,它会执行包含所有三组参数的函数
这很糟糕。我无法理解。
此致
泰勒
答案 0 :(得分:1)
你无法“禁用”某个功能,但你可以设置一个强制它立即退出的变量:
var stopMe = true
function myFunction() {
if(stopMe) {
return;
}
...
}
答案 1 :(得分:0)
使用特定类运行标记函数。函数的结尾将从标记中删除此类。
jQuery(".myclass").click(function(){
/* do something */
jQuery(this).removeClass('myclass');
});
答案 2 :(得分:0)
不能告诉你问题的所有内容。但是,每次用户点击$("div.editable").click(function (e) {
或div.editable
时,此部分Foo arugments[0]
都会将多个点击事件绑定到buttonSel
。
答案 3 :(得分:0)
你似乎一遍又一遍地绑定并重新绑定相同的函数,这可能就是你在那里e.stopEventPropagation
的原因。尝试分配事件一次,然后管理当前状态(哪个按钮处于活动状态)并从那里开始:
var $currentInput = null;
$("#border_button,#background_color_button,#opacity_button").click(function() {
if ($currentInput == null) {
$currentInput = $(this).prev();
}
});
$("div.editable").click(function(e) {
if ($currentInput == null)
return;
$(this).css(GetCssProperties());
showUser($currentInput.val(), /* where does someValue come from? */, this.id)
$currentInput = null;
});
function GetCssProperties() {
if ($currentInput == null) return null;
var value = $currentInput.val();
if ($currentInput.attr("id") == "border-radius") return {
"-webkit-border-radius": value
}
if ($currentInput.attr("id") == "background-color") return {
"background-color": value
}
if ($currentInput.attr("id") == "opacity") return {
"opacity": value
}
}
这里的工作示例:http://jsfiddle.net/HUJ5A/
答案 4 :(得分:0)
这可能是一个可行的解决方案:
将您的功能更改为:
function Fos(inputSel,someValue,cssProperty){
var buttonSel = $('#lastDivClicked').val();
$(buttonSel).click(function(){ ... }
}