首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Farbtastic多字段- Wordpress

Farbtastic多字段- Wordpress
EN

Stack Overflow用户
提问于 2012-05-03 23:37:34
回答 2查看 1.2K关注 0票数 1

我正在开发一个wordpress主题。我现在正在处理主题选项页面。我添加了farbtastic (4个字段),问题是每次我点击输入时,颜色选择器也会出现在其他3个字段上。有人知道怎么解决这个问题吗?谢谢!

代码语言:javascript
复制
<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输出:

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-04 00:29:57

您在jQuery选择器中引用的元素范围太广。从本质上讲,您的代码每次单击color-picker类的任何内容时,都会显示fabox类的任何内容。

您应该使您的引用更具体到当前单击的.color-picker

我建议替换这个:

代码语言:javascript
复制
$('.fabox').fadeIn();

有了这个:

代码语言:javascript
复制
$(this).parent().find('.fabox').fadeIn();

因此,您只引用连接到刚才单击的.color-picker.fabox

编辑:正如gillesc所指出的,使用它实际上会更快:

代码语言:javascript
复制
$(this).next().fadeIn();

只要.fabox始终遵循.color-picker即可。

如果.fabox在同一个容器中,但不是您可以使用的下一个元素:

代码语言:javascript
复制
$(this).next('.fabox').fadeIn();
票数 2
EN

Stack Overflow用户

发布于 2012-05-04 00:04:44

你不需要使用jQuery.each()来使用for (e in foo),它要干净得多,这里的e是一个全局变量,非常糟糕,每个错误都不会发生。

同样,使用$(function(){});而不是$(document).ready(function(){});,它的功能完全相同,但您可以获得更好的内存占用,并且代码更容易阅读。

在dom ready函数中,你不需要$作为参数,当你需要一个闭包时,这是一种保证$是闭包内的jQuery的方法。

代码语言:javascript
复制
(function($) {
  // your code
})(jQuery);

所以你的代码会像这样结束,而不是你已有的代码

代码语言:javascript
复制
$(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();
    });
});​

我认为你的问题可能是身份ID,所以它混淆了插件,但公平地说,如果你发布HTML输出而不是PHP代码,这会更容易,因为它是我们想要看到的DOM,如果不知道PHP变量输出的是什么,就很难猜测。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10434697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档