如何在将表单元素重置为默认值的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>
答案 0 :(得分: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方法即可。请注意,因为只使用“color”类不会创建CustomJSColor。您需要以编程方式创建它。
答案 1 :(得分:3)
我知道这是一篇旧文章,但我遇到了同样的问题并找到了一个更简单的解决方案,假设表单元素是带有'color'类的jscolor输入
$('.color').each(function() {
$(this).focus();
});
$('#someotherinput').focus();
获得焦点会触发jscolor mojo并适当地设置单元格背景和文本颜色。
答案 2 :(得分:1)
通过传递输入类值来触发installByClassName
jscolor.installByClassName('jscolor');
答案 3 :(得分:0)
我发现这是一个很好的解决方案。设置值(JavaScript)后,我调用此函数:
document.getElementById('<your_id>').jscolor.importColor();
然后显示新颜色。