我正在开发一个wordpress主题。我正在处理主题选项页面。我添加了farbtastic(4个字段),问题是每次我点击输入时,颜色选择器也出现在其他3个字段上。有谁知道如何解决这个问题?谢谢!
<div> <br />
<label for="<?php echo $colorPicker['ID']; ?>"><?php _e($colorPicker['label']); ?></label>
<input type="text" class="color-picker" id="<?php echo $colorPicker['ID']; ?>" value="<?php echo get_option($colorPicker['ID']); ?>" name="<?php echo $colorPicker['ID']; ?>" />
<div id="<?php echo $colorPicker['ID']; ?>_color" class="fabox"></div> </div>
<?php endforeach; ?>
<p><input type="submit" name="update_options" value="Update Options" class="button-primary" /></p>
</form>
</div>
<script type="text/javascript">
jQuery(document).ready(function($) {
var colorPickers = $('.color-picker');
console.log(colorPickers);
for (e in colorPickers) {
if (colorPickers[e].id != undefined) {
var colorPickerID = colorPickers[e].id;
$('#' + colorPickerID + '_color').farbtastic('#' + colorPickerID);
}
}
$('.fabox').hide();
$('.color-picker').click(function() {
$('.fabox').fadeIn();
});
$(document).mousedown(function() {
$('.fabox').each(function() {
var display = $(this).css('display');
if (display == 'block') $(this).fadeOut();
});
});
});
</script>
HTML OUTPUT:
<form method="POST" action="">
<div>
<br />
<label for="color_1"><strong>Post Title</strong></label>
<input type="text" class="color-picker" id="color_1" value="#273990" name="color_1" />
<div id="color_1_color" class="fabox"></div>
</div>
<div>
<br />
<label for="color_2"><strong>Paragraph Text</strong></label>
<input type="text" class="color-picker" id="color_2" value="#840000" name="color_2" />
<div id="color_2_color" class="fabox"></div>
</div>
<div>
<br />
<label for="color_3"><strong>Example</strong></label>
<input type="text" class="color-picker" id="color_3" value="#4377df" name="color_3" />
<div id="color_3_color" class="fabox"></div>
</div>
<div>
<br />
<label for="color_4"><strong>And Another Example</strong></label>
<input type="text" class="color-picker" id="color_4" value="#3c8400" name="color_4" />
<div id="color_4_color" class="fabox"></div>
</div>
<p><input type="submit" name="update_options" value="Update Options" class="button-primary" /></p>
</form>
</div>
答案 0 :(得分:2)
您使用jQuery选择器引用了太广泛的元素。基本上,您的代码表示每次使用color-picker
类点击任何内容时,都会显示fabox
类的任何内容。
您应该使您的参考更具体地针对当前点击的.color-picker
。
我建议更换:
$('.fabox').fadeIn();
有了这个:
$(this).parent().find('.fabox').fadeIn();
因此,您只引用与您刚刚点击的.fabox
相关联的.color-picker
。
编辑:正如gillesc所说,它实际上会更快使用:
$(this).next().fadeIn();
只要.fabox
始终跟随.color-picker
。
如果.fabox
位于同一容器内,而不是您可以使用的下一个元素:
$(this).next('.fabox').fadeIn();
答案 1 :(得分:1)
您不需要使用for (e in foo)
使用jQuery.each()
,更清洁,而且您的e是一个非常糟糕的全局变量,每个错误都不会发生。
同样使用$(function(){});
而不是$(document).ready(function(){});
它会完全相同,但您可以获得更好的占用空间,并且您的代码更容易阅读。
在dom ready函数中你不需要$作为参数,当你需要一个闭包时,是一种保证$是闭包内jQuery的方法。
(function($) {
// your code
})(jQuery);
所以你的代码最终会像这样,而不是你拥有的
$(function() {
$('.color-picker').each(function() {
if (this.id) {
$('#' + this.id + '_color').farbtastic('#' + this.id);
};
}).click(function() {
$(this).next().fadeIn();
});
$('.fabox').hide();
$(document).mousedown(function() {
$('.fabox:visible').fadeOut();
});
});
我认为你的问题可能是idtencial ID,所以它混淆了插件,但公平地说,如果你发布HTML输出而不是PHP代码会更容易,因为它是我们想要看到的DOM而且很难猜到知道PHP变量输出的内容。