2017-01-17 9 views
2

Я пытаюсь создать функцию, чтобы при нажатии пользователем на div и нажатии кнопки фонового цвета этот div изменился, поэтому значение должно быть сохранено как переменная, но я не может заставить его работать, поскольку все время говорит, что переменная «storage» не определена. Целая страница можно увидеть по адресу:Изменение цвета выбранного div jquery

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div id="content-link2"> 
    <title>Template 1</title> 
    <link href="http://localhost/fyproject/public/templates/css.css" rel="stylesheet" type="text/css"> 

      <button class="btn btn-default form-control margin color" value="yellow">Background</button> 
      <button class="btn btn-default form-control margin color" value="red">Background</button> 
    <div class="logo"> 
    <img class="images" id="image" src="#" alt="Your Logo"> 
    </div> 
    <div contenteditable="true" id="content" class="draggable ui-widget-content refresh ui-draggable ui-draggable-handle" style="position: relative;"> 
    <p>hlo</p> 
    </div> 
    <div id="comments"> 
    <form name="forma"> 
     <textarea name="commentUser" id="commentUser" class="refresh" cols="40" rows="5">Comments here... 
     </textarea> 
     <br> 
     <input type="submit" value="Ready!" id="send-data"> 
     <!--onClick="writeComment(e);"--> 
     <div id="editTxt" class="refresh" contenteditable="true"> 
     <p>This text can be by the user.</p> 
     </div> 
    </form> 
    </div> 


    </div> 

$(document).ready(function() { 
    $('.color').click(function() { 
    $(storage).css("background-color", $(this).attr("value")); 
    }); 
}); 

$('#content-link2').on('click', 'div', function(e) { 
    var storage = ($(e.target).attr("id")); 
}); 

Page можно увидеть по адресу:

https://jsfiddle.net/mbqzL73r/

+2

вы должны объявить хранение вне мыши и сделать он глобальный для обоих кликов – Pete

+0

Пожалуйста, предоставьте мне пример, если это возможно, я являюсь визуальным r поэтому, читая текст, мне трудно представить, что мне нужно сделать;) – Przemek

+0

См. ответ ниже и прочитайте это сообщение [Что такое область переменных в javascript] (http://stackoverflow.com/questions/ 500431/what-is-the-scope-of-variables-in-javascript) – Pete

ответ

2

Вы должны сделать хранение глобального к области как для событий щелчка

$(document).ready(function() { 
 
    var storage; 
 
    $('.color').click(function() { 
 
    $('#' + storage).css("background-color", $(this).attr("value")); 
 
    }); 
 

 
    $('#content-link2').on('click', 'div', function(e) { 
 
    storage = ($(e.target).attr("id")); 
 
    }); 
 
});

More information about js variable scope

+0

Вам нужно добавить' # '' к селектору во втором обработчике кликов –

+0

Ah yeah, добавлено спасибо – Pete

+0

Почему бы не просто 'storage = e.target'? Тогда вам не нужно префикс # – Satpal

0

переменная хранения в пределах второй функции, вам нужно объявить хранение в качестве глобальной переменной , например:

var storage = ""; 
$(document).ready(function() { 
    $('.color').click(function() { 
    $(storage).css("background-color", $(this).attr("value")); 
    }); 
}); 

$('#content-link2').on('click', 'div', function(e) { 
    storage = ($(e.target).attr("id")); 
}); 
+0

Используйте 'storage = e.target' в противном случае префикс '#', чтобы его можно было использовать как селектор идентификаторов – Satpal

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