尝试使用id == valores0注册窗口小部件,但该ID已经注册 [英] Tried to register widget with id==valores0 but that id is already registered

查看:220
本文介绍了尝试使用id == valores0注册窗口小部件,但该ID已经注册的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我得到这个错误,我不知道如何解决。我阅读了此链接 before。



编辑:1



index.php

 < script type =text / javascript> 
$(document).ready(function(){
$(#customForm)。submit(function(){
var formdata = $(#customForm)。serializeArray );

$ .ajax({
url:sent.php,
type:post,
dataType:json,
data:formdata,
success:function(data){
switch(data.livre){
case'tags':
$(#msgbox2)。fadeTo 200,0.1,function(){
$(this).html('Empty tags')。fadeTo(900,1);
});
break;

default:
$(#msgbox2)fadeTo(200,0.1,function(){
$(this).html('Update' (){
$('#conteudo')。load('dojo / test_Slider.php');
});
});
break;
}
}
});

返回false;
});
});
< / script>

test_slider.php

 < script type =text / javascript> 

var slider = []; (i = 0; i <5; i ++){

slider [i] =(

function(i){

return function(){

var node = dojo.byId(input+ [i]);
var n = dojo.byId(valores + [i]);

var rulesNode = document.createElement('div'+ [i]);
node.appendChild(rulesNode);

var sliderRules = new dijit.form.Horizo​​ntalRule({
count:11,
style:{height:4px}
},rulesNode);

var labels = new dijit.form.Horizo​​ntalRuleLabels({
style:{height:1em,fontSize:75%},
},n);

var theSlider = new dijit.form.Horizo​​ntalSlider({
value:5,
onChange:function(){
console.log(arguments);
},
name:输入+ [i],
onChange:function(v ()()()()()()()(){$
minimum:1,
maximum:9,
}
},node);

theSlider.startup();
sliderRules.startup();
}

})(i);
dojo.addOnLoad(slider [i]);
}

< / script>

问题:首先点击提交btn都可以很好的导入5个滑块。第二次点击,应该是更新,但是我收到以下消息:

 尝试使用id == valores0注册窗口小部件,但该ID已经注册

[演示视频] 2

解决方案

  var i = i || 0; //缓存这个循环结束
dijit.registry.map(function(widget){
if(+ widget.id.replace(/ ^ [^ \d] + /,' ')< i){
widget.destroyRecursive();
}
});
/ *
您的循环按照missingno的答案中所述修复。
* /


i get this error, and i don't know how can be solved. I read this link before.

EDIT:1

index.php

<script type="text/javascript">
$(document).ready(function() {   
    $("#customForm").submit(function() {
        var formdata = $("#customForm").serializeArray();

        $.ajax({
            url: "sent.php",
            type: "post",
            dataType: "json",
            data: formdata,
            success: function(data) {
                switch (data.livre) {
                case 'tags':
                    $("#msgbox2").fadeTo(200, 0.1, function() {
                        $(this).html('Empty tags').fadeTo(900, 1);
                    });
                    break;

                default:
                    $("#msgbox2").fadeTo(200, 0.1, function() {
                        $(this).html('Update').fadeTo(900, 1, function() {
                            $('#conteudo').load('dojo/test_Slider.php');   
                        });
                    });
                    break;
                }
            }
        });

        return false;
    });
});
</script>

test_slider.php

<script type="text/javascript">

var slider = [];

for (i = 0; i < 5; i++) {

    slider[i] = (

    function(i) {

        return function() {

            var node = dojo.byId("input"+[i]);
            var n = dojo.byId("valores"+[i]);

            var rulesNode = document.createElement('div'+[i]);
            node.appendChild(rulesNode);

            var sliderRules = new dijit.form.HorizontalRule({
                count:11,
                style:{height:"4px"}
            },rulesNode);

            var labels = new dijit.form.HorizontalRuleLabels({
                style:{height:"1em",fontSize:"75%"},
            },n);

            var theSlider = new dijit.form.HorizontalSlider({
                value:5,
                onChange: function(){
                    console.log(arguments);
                },
                name:"input"+[i],
                onChange:function(val){ dojo.byId('value'+[i]).value = dojo.number.format(1/val,{places:4})},
                style:{height:"165px"},
                minimum:1,
                maximum:9,
                   }
            },node);

            theSlider.startup();
                sliderRules.startup();
        }

    })(i);
    dojo.addOnLoad(slider[i]);
}

</script>

Problem: First click in submit btn all works well, 5 sliders are imported. Second click, an update is supposed, but i get this message:

Tried to register widget with id==valores0 but that id is already registered

[Demo video]2

解决方案

Just to add on to @missingo's answer and @Kevin's comment. You could walk through the existing dijits by looking in the registry:

var i = i || 0; // Cache this at the end of your loop
dijit.registry.map(function (widget) {
    if (+widget.id.replace(/^[^\d]+/, '') <  i) {
        widget.destroyRecursive();
    }
});
/*
    Your loop fixed as described in missingno's answer.
*/

这篇关于尝试使用id == valores0注册窗口小部件,但该ID已经注册的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆