2015-10-27 8 views
1

Я динамически создаю ползунки (чтобы изменить цвет текста во вводе) и перетаскиваемый ввод с некоторым текстом. Я не знаю, почему, последний созданный слайдер работает с каждым входом, а какой-либо другой слайдер не работает. Как решить эту проблему? Каждый вход имеет класс coresponding к классу слайдера ...Динамически созданные слайдеры не работают за исключением последнего

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
<title></title> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
 
<script type='text/javascript' src='http://code.jquery.com/jquery-1.9.1.js'></script> 
 
<script type="text/javascript" src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script> 
 
<link rel="stylesheet" type="text/css" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css"> 
 
    
 
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css"> 
 
    <script src="http://code.jquery.com/jquery-1.10.2.js"></script> 
 
    <script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script> 
 
    
 
    <style type='text/css'> 
 
    html, body { 
 
    margin:0px; 
 
    padding:0px; 
 
    width:auto; 
 
    height:auto; 
 
} 
 
.container { 
 
    margin:20px; 
 
} 
 
.bl { 
 
    width:100px; 
 
    height:100px; 
 
    border-radius:10px; 
 
    display:block; 
 
    margin:5px; 
 
    float:left; 
 
} 
 
.mark:hover{ float:left; width: 50px; height: 50px; cursor: move; position: relative; left: 50px; background-image: url('cross.jpg'); background-repeat: no-repeat; border: 0px solid black; -webkit-opacity: 1; } 
 
.mark{ float:left; width: 50px; height: 50px; padding-left: 30px; cursor: move; position: relative; left: 50px; background-image: url('cross.jpg'); background-repeat: no-repeat; border: 0px solid black; -webkit-opacity: 0.25; } 
 
input { margin-left: 50px; height: 50px;} 
 

 
.del {visibility: hidden;} 
 
.mark:hover > .del {visibility: visible; cursor: pointer; position: relative; left: 35px; top: -50px; content: '*', font-weight: bold;} 
 

 
.color_picker{ position: relative; float: right;} 
 

 
    #red1, #green1, #blue1, 
 
    #red2, #green2, #blue2, 
 
    #red3, #green3, #blue3, 
 
    #red4, #green4, #blue4, 
 
    #red5, #green5, #blue5, 
 
    #red6, #green6, #blue6, 
 
    #red7, #green7, #blue7 { 
 
    float: left; 
 
    clear: left; 
 
    width: 300px; 
 
    margin: 15px; 
 
    } 
 

 
    #red1, #red2, #red3 .ui-slider-range { background: #ef2929; !important } 
 
    #red1, #red2 .ui-slider-handle { border-color: #ef2929; } 
 
    #green1, #green2, #green3, #green4, #green5, #green6, #green7, #green8 .ui-slider-range { background: #8ae234; } 
 
    #green1, #green2, #green3, #green4, #green5, #green6, #green7, #green8 .ui-slider-handle { border-color: #8ae234; } 
 
    #blue1, #blue2, #blue3, #blue4, #blue5, #blue6, #blue7, #blue8 .ui-slider-range { background: #729fcf; } 
 
    #blue1, #blue2, #blue3, #blue4, #blue5, #blue6, #blue7, #blue8 .ui-slider-handle { border-color: #729fcf; } 
 

 
</style> 
 
<script> 
 
    $(document).ready(function() { 
 
    \t 
 
    function hexFromRGB(r, g, b) { 
 
    var hex = [ 
 
     r.toString(16), 
 
     g.toString(16), 
 
     b.toString(16) 
 
    ]; 
 
    $.each(hex, function(nr, val) { 
 
     if (val.length === 1) { 
 
     hex[ nr ] = "0" + val; 
 
     } 
 
    }); 
 
    return hex.join("").toUpperCase(); 
 
    }; 
 

 
\t var i = 1; 
 
    $('.container').on('click', '.dodaj', function() { 
 

 
     $('<div class=mark ui-widget-content ><input type=text class="ui-state-active swatch'+i+'" value=This is input box><div class=del>*</div></div>').appendTo('.container').draggable(); 
 
     $('<div id="red_val'+i+'">ss</div><div id="red'+i+'"></div><div id="green'+i+'"></div><div id="blue'+i+'"></div>').appendTo('.color_picker'); 
 
     i++; 
 
}); 
 

 
$(document).ready(function() { 
 
\t var i = 0; 
 

 
\t $('.container').on('click', '.dodaj', function() { 
 
\t  \t \t i++; 
 
    \t function refreshSwatch() { 
 

 
    var red = $("#red"+i).slider("value"), 
 
     green = $("#green"+i).slider("value"), 
 
     blue = $("#blue"+i).slider("value"), 
 
     hex = hexFromRGB(red, green, blue); 
 
    $(".swatch"+i).css("color", "#" + hex); 
 
    $("#red_val"+i).text("#" + hex); 
 
    } 
 
    
 
    \t $(function() { 
 
    $("#red"+ i + ", #green"+i + ", #blue"+i).slider({ 
 
     orientation: "horizontal", 
 
     range: "min", 
 
     max: 255, 
 
     value: 127, 
 
     slide: refreshSwatch, 
 
     change: refreshSwatch 
 

 
    }); 
 
    
 
    $("#red"+i).slider("value", 255); 
 
    $("#green"+i).slider("value", 140); 
 
    $("#blue"+i).slider("value", 60); 
 
    }); 
 
    }); 
 
}); 
 

 
    $('.container').on('click', '.del', function() { 
 
     \t $(this).parent('.mark').css("visibility", "hidden"); 
 
    }); 
 
     
 
}); 
 

 
    $(document).ready(function edit() { 
 
    
 
    $('.container').on('click', '.ukryj', function x() { 
 
     $('.mark').css({"opacity":"1", "visibility":"hidden"}); 
 
     $('.del').css("visibility","hidden"); 
 
     $('.ui-state-active').css({"visibility":"visible", "border":"0px solid black"}); 
 

 
    }); 
 
    
 
    $('.container').on('click', '.pokaz', function() { 
 

 
     $('.mark').css({"opacity":"", "visibility":""}); 
 
     $('.del').css("visibility",""); 
 
     $('.ui-state-active').css({"visibility":"", "border":""}); 
 

 

 
    }); 
 
    
 
     \t $(".draggable").draggable(); 
 
     \t $(".ui-state-active").resizable(); 
 
     
 
    
 
}); 
 
</script> 
 
    
 
    
 
<body> 
 

 
<div class="container"> 
 
<div class="dodaj">Add input</div> \t <div class="ukryj">Hide input</div> <div class="pokaz">Show</div> 
 

 
<div class="color_picker"></div> 
 
</div> 
 
</body>

+0

(http://stackoverflow.com/questions/1451009/javascript-infamous-loop-issue) - N o «реальный» цикл в вашем случае, но тот же эффект/проблема – Andreas

ответ

0

Пожалуйста, проверьте это: [? Javascript пресловутый вопрос Loop]

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
<title></title> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
 
<script type='text/javascript' src='http://code.jquery.com/jquery-1.9.1.js'></script> 
 
<script type="text/javascript" src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script> 
 
<link rel="stylesheet" type="text/css" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css"> 
 
    
 
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css"> 
 
    <script src="http://code.jquery.com/jquery-1.10.2.js"></script> 
 
    <script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script> 
 
    
 
    <style type='text/css'> 
 
    html, body { 
 
    margin:0px; 
 
    padding:0px; 
 
    width:auto; 
 
    height:auto; 
 
} 
 
.container { 
 
    margin:20px; 
 
} 
 
.bl { 
 
    width:100px; 
 
    height:100px; 
 
    border-radius:10px; 
 
    display:block; 
 
    margin:5px; 
 
    float:left; 
 
} 
 
.mark:hover{ float:left; width: 50px; height: 50px; cursor: move; position: relative; left: 50px; background-image: url('cross.jpg'); background-repeat: no-repeat; border: 0px solid black; -webkit-opacity: 1; } 
 
.mark{ float:left; width: 50px; height: 50px; padding-left: 30px; cursor: move; position: relative; left: 50px; background-image: url('cross.jpg'); background-repeat: no-repeat; border: 0px solid black; -webkit-opacity: 0.25; } 
 
input { margin-left: 50px; height: 50px;} 
 

 
.del {visibility: hidden;} 
 
.mark:hover > .del {visibility: visible; cursor: pointer; position: relative; left: 35px; top: -50px; content: '*', font-weight: bold;} 
 

 
.color_picker{ position: relative; float: right;} 
 

 
    #red1, #green1, #blue1, 
 
    #red2, #green2, #blue2, 
 
    #red3, #green3, #blue3, 
 
    #red4, #green4, #blue4, 
 
    #red5, #green5, #blue5, 
 
    #red6, #green6, #blue6, 
 
    #red7, #green7, #blue7 { 
 
    float: left; 
 
    clear: left; 
 
    width: 300px; 
 
    margin: 15px; 
 
    } 
 

 
    #red1, #red2, #red3 .ui-slider-range { background: #ef2929; !important } 
 
    #red1, #red2 .ui-slider-handle { border-color: #ef2929; } 
 
    #green1, #green2, #green3, #green4, #green5, #green6, #green7, #green8 .ui-slider-range { background: #8ae234; } 
 
    #green1, #green2, #green3, #green4, #green5, #green6, #green7, #green8 .ui-slider-handle { border-color: #8ae234; } 
 
    #blue1, #blue2, #blue3, #blue4, #blue5, #blue6, #blue7, #blue8 .ui-slider-range { background: #729fcf; } 
 
    #blue1, #blue2, #blue3, #blue4, #blue5, #blue6, #blue7, #blue8 .ui-slider-handle { border-color: #729fcf; } 
 

 
</style> 
 
<script> 
 
    $(document).ready(function() { 
 
    \t 
 
    function hexFromRGB(r, g, b) { 
 
    var hex = [ 
 
     r.toString(16), 
 
     g.toString(16), 
 
     b.toString(16) 
 
    ]; 
 
    $.each(hex, function(nr, val) { 
 
     if (val.length === 1) { 
 
     hex[ nr ] = "0" + val; 
 
     } 
 
    }); 
 
    return hex.join("").toUpperCase(); 
 
    }; 
 

 
\t var i = 1; 
 
    $('.container').on('click', '.dodaj', function() { 
 

 
     $('<div class=mark ui-widget-content ><input type=text class="ui-state-active swatch'+i+'" value=This is input box><div class=del>*</div></div>').appendTo('.container').draggable(); 
 
     $('<div id="red_val'+i+'">ss</div><div id="red'+i+'" data-number="'+i+'"></div><div id="green'+i+'" data-number="'+i+'"></div><div id="blue'+i+'" data-number="'+i+'"></div>').appendTo('.color_picker'); 
 
     
 
     
 
     $("#red"+ i + ", #green"+i + ", #blue"+i).slider({ 
 
     orientation: "horizontal", 
 
     range: "min", 
 
     max: 255, 
 
     value: 127, 
 
     slide: refreshSwatch, 
 
     change: refreshSwatch 
 

 
    }); 
 
    
 
    $("#red"+i).slider("value", 255); 
 
    $("#green"+i).slider("value", 140); 
 
    $("#blue"+i).slider("value", 60); 
 
     
 
     i++; 
 
}); 
 

 

 

 

 
    \t function refreshSwatch(event, ui) { 
 

 
     var element = ui.handle; 
 
     element = $(element); 
 
     var i = element.closest(".ui-slider").attr("data-number"); 
 
     var red = $("#red"+i).slider("value"), 
 
     green = $("#green"+i).slider("value"), 
 
     blue = $("#blue"+i).slider("value"), 
 
     hex = hexFromRGB(red, green, blue); 
 
     $(".swatch"+i).css("color", "#" + hex); 
 
     $("#red_val"+i).text("#" + hex); 
 
    } 
 

 

 

 
    $('.container').on('click', '.del', function() { 
 
     \t $(this).parent('.mark').css("visibility", "hidden"); 
 
    }); 
 
     
 
}); 
 

 
    $(document).ready(function edit() { 
 
    
 
    $('.container').on('click', '.ukryj', function x() { 
 
     $('.mark').css({"opacity":"1", "visibility":"hidden"}); 
 
     $('.del').css("visibility","hidden"); 
 
     $('.ui-state-active').css({"visibility":"visible", "border":"0px solid black"}); 
 

 
    }); 
 
    
 
    $('.container').on('click', '.pokaz', function() { 
 

 
     $('.mark').css({"opacity":"", "visibility":""}); 
 
     $('.del').css("visibility",""); 
 
     $('.ui-state-active').css({"visibility":"", "border":""}); 
 

 

 
    }); 
 
    
 
     \t $(".draggable").draggable(); 
 
     \t $(".ui-state-active").resizable(); 
 
     
 
    
 
}); 
 
</script> 
 
    
 
    
 
<body> 
 

 
<div class="container"> 
 
<div class="dodaj">Add input</div> \t <div class="ukryj">Hide input</div> <div class="pokaz">Show</div> 
 

 
<div class="color_picker"></div> 
 
</div> 
 
</body>

+0

Все работает отлично! Кстати, вы можете сказать мне, почему «# red1, # ​​red2» и т. Д. Css работает неправильно? Я разделил их на ',' но похоже, что только последняя позиция '# red3' работает нормально. –

+1

вместо '# red1, # ​​red2, # red3 .ui-slider-range'; это должно быть '# red1 .ui-slider-range, # red2 .ui-slider-range, # red3 .ui-slider-range' – vijayP

+0

Большое спасибо! :) –

Смежные вопросы