3

在将表单元素重置为默认值的 ajax 帖子之后如何运行jscolor ?

当您单击“恢复默认值”按钮时,下面的 ajax 成功发布到页面内 iframe 并恢复页面表单值到默认值。问题在于附加了 jscolor 的输入不会将其背景颜色更改回默认值。

我所做的研究使我相信我需要使用 jscolor.init(); 重新启动 jscolor;在 ajax 发布之后,但我无法让它工作。我还尝试在 ajax 帖子之外构建一个函数(重置表单值,然后重置 jscolor.init();)并使用 onclick 将其绑定到“恢复默认值”按钮,但这不起作用。

在 ajax 发布后如何让 jscolor 再次运行?

Javascript:

<script type="text/javascript">
$(document).ready(function() {
    $('#restore_form').click(function() {
        $.ajax({
            data: $('#build_form').serialize(),
            type: $('#build_form').attr('method'),
            url: $('#build_form').attr('action')+'?type=restore',
            success: function(response) {
                $('#preview').contents().find('html').html(response);
                $('#build_form')[0].reset();
                jscolor.init();
            }
        });
        return false;
    });
});
</script>

HTML:

<iframe id="preview" src="preview.php" width="100%" height="120"></iframe>

<form id="build_form" class="build_form" action="preview.php" method="post">
    <input type="text" name="background_color" value="#0CA0E2" class="color {adjust:false,hash:true}" />
    <input id="restore_form" name="restore" type="submit" value="Restore Default" class="button" />
    <input id="save_form" name="submit" type="submit" value="Save Changes" class="button" />
</form>
4

4 回答 4

6

尝试重置颜色。看到你的标记,我认为你的默认颜色是 0CA0E2。我说得对吗?如果是这样,您只需要(如果您使用 jscolor 构造函数并将新对象分配给 myJsColorVar var):

myJsColorVar.color.fromString("0CA0E2"); // instead of jscolor.init()

在文档中,它被用于:

document.getElementById("myColorInput").color.fromString("0CA0E2");

我认为最后一个示例更适合您,因为我看到您没有在 JS 中创建 jscolor,而是应用了“颜色类”。

您只需要为颜色输入配置一个 id:

<form id="build_form" class="build_form" action="preview.php" method="post">
    <input id="myColorInput" type="text" name="background_color" value="#0CA0E2" class="color {adjust:false,hash:true}" />
    <input id="restore_form" name="restore" type="submit" value="Restore Default" class="button" />
    <input id="save_form" name="submit" type="submit" value="Save Changes" class="button" />
</form>

看看这里:http: //jscolor.com/try.php#setting-color

编辑:我创建了一个自定义 jscolor。

<html>
    <head>
        <title>jscolor demo</title>
    </head>
    <body>
        <script type="text/javascript" src="jscolor.js"></script>
        <script type="text/javascript">

            function CustomJSColor( applyIn, defaultColor, opts ) {

                this.jscolor = new jscolor.color( document.getElementById( applyIn ), opts );
                this.defaultColor = defaultColor;
                this.jscolor.fromString( this.defaultColor );

                this.reset = function() {
                    this.jscolor.fromString( this.defaultColor );
                };

            }

        </script>
    <body>
        <input id="myField">
        <script>

            // the input with id "myField" will be the color picker
            // 0099cc is the default color
            // {} is the other options
            var myPicker = new CustomJSColor( "myField", "0099cc", {} );

            // to reset the color you just need to call reset
            myPicker.reset();

        </script>
    </body>
</html>

我试图从 jscolor.color 继承,但它似乎不是构造函数,所以我创建了那个类,里面有一个 jscolor。要重置组件的颜色,只需调用 reset 方法。请注意,因为仅使用“颜色”类不会创建 CustomJSColor。您需要以编程方式创建它。

于 2012-07-25T04:33:13.843 回答
3

我知道这是一篇旧帖子,但我遇到了同样的问题并找到了一个更简单的解决方案,假设表单元素是带有“颜色”类的 jscolor 输入

$('.color').each(function() {
    $(this).focus();
});
$('#someotherinput').focus();

获得焦点会触发 jscolor mojo 并适当地设置单元格背景和文本颜色。

于 2012-12-09T02:24:27.427 回答
1

我发现这是一个很好的解决方案。设置值(JavaScript)后,我调用此函数:

document.getElementById('<your_id>').jscolor.importColor();

然后显示新颜色。

于 2017-02-01T10:38:52.663 回答
1

通过传递输入类值触发 installByClassName

jscolor.installByClassName('jscolor');
于 2019-01-11T08:49:44.873 回答