Как удалить, скрыть значения.
У меня есть форма по которой я добавлю категории в проект, когда я нажимаю добавить категории появляется форма где я могу выбрать категорию. К проекту я могу добавить несколько категорий. Я не могу понять как мне скрыть ту категорию которою я выбрал первый раз, что бы как я добавлял категории второй раз в списку не было той категории которою я выбрал первый раз. Помогите пожалуйста :)
То есть первый раз когда я нажимаю на кнопку "Добавить категорию" я выбираю с списка категорий какую категорию я хочу добавить, например "Management" второй раз когда я нажимаю "добавить категорию" что бы в этом списку не было "Management" <select class="form-control js-category-select" name="project[categories_projects_attributes][1543933181636][category_id]" id="project_categories_projects_attributes_1543933181636_category_id"> <option value="">Select Category</option> <option data-default_external_rate="0" value="5">Management</option> <option data-default_external_rate="0" value="7">DevOps</option> <option data-default_external_rate="0" value="8">Design</option> </select> <select class="form-control js-category-select" name="project[categories_projects_attributes][1543933186714][category_id]" id="project_categories_projects_attributes_1543933186714_category_id"> <option value="">Select Category</option> <option data-default_external_rate="0" value="5">Management</option> <option data-default_external_rate="0" value="7">DevOps</option> <option data-default_external_rate="0" value="8">Design</option> </select> https://jsfiddle.net/Lhjau0fk/1/ |
Gidpoiiohika,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { $(".form-control").change(function() { var i = this.selectedIndex; this.options.remove(i); }) }); </script> </head> <body> <select class="form-control js-category-select" name="project[categories_projects_attributes][1543933181636][category_id]" id="project_categories_projects_attributes_1543933181636_category_id"> <option value="">Select Category</option> <option data-default_external_rate="0" value="5">Management</option> <option data-default_external_rate="0" value="7">DevOps</option> <option data-default_external_rate="0" value="8">Design</option> </select> <select class="form-control js-category-select" name="project[categories_projects_attributes][1543933186714][category_id]" id="project_categories_projects_attributes_1543933186714_category_id"> <option value="">Select Category</option> <option data-default_external_rate="0" value="5">Management</option> <option data-default_external_rate="0" value="7">DevOps</option> <option data-default_external_rate="0" value="8">Design</option> </select> </body> </html> |
рони,
Спасибо Вам большое что помогли, ну Ваш код работает не так мне нужно, может что то я не понял я просто только учусь :( сейчас если я выбираю категорию она не выбираться а просто удаляется, а мне нужно что бы я выбрал категорию и показало какую пользователь выбрал категорию, потом когда второй раз я добавляю категорию, тоже мог выбрать категорию и что бы показать пользователю какую категорию он выбрал. Ну что бы уже не было той категории который пользователь первый раз добавил. |
Gidpoiiohika,
1. зачем в селекторе показывать, то что было выбрано? покажите то что выбрано в другом месте. 2. если нужно именно так как вы хотите, ищите замену селектора гугл - кастомизация селекта 3. возможно я вас не понимаю, ждите телепата или уточните алгоритм. |
|
Gidpoiiohika,
зачем несколько селекторов, достаточно одного вместо кнопки add |
рони,
эта кнопка находиться в проекте, то есть я к проекту добавляю категории. |
select Add Category
Gidpoiiohika,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .remove:after{ content: "Remove Category"; background-color: #0000FF; padding: 5px; margin: 5px; border-radius: 4px; } li{ margin: 15px; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { $(".form-control").change(function() { var i = this.selectedIndex; var opts = this.options; if (i) { var opt = opts[i]; opts.remove(i); var html = opt.text + "<span class='remove'>"; var li = $("<li>", {html:html}).appendTo("ul"); li.on("click", ".remove", function() { li.remove(); opts.add(opt); opts.selectedIndex = 0; }); } }); }); </script> </head> <body> <ul> </ul> <select class="form-control" > <option value="" >Add Category</option> <option data-default_external_rate="0" value="5">Management</option> <option data-default_external_rate="0" value="7">DevOps</option> <option data-default_external_rate="0" value="8">Design</option> </select> </body> </html> |
рони,
спасибо Вам большое что уделили мне время, Ваш код работает, ну мне нужно именно так как я написал :( буду пробовать дальше решить эту проблему. Данный момент мой код выглядит так: div class='nested-fields' div class='field' = f.select :category_id, options_for_select(Category.all.map{|e| [e.name, e.id, { 'data-default_external_rate' => e.default_external_rate }]}, f.object.category_id), { prompt: "Select Category" }, { class: "js-category-select" } = f.text_field :external_rate, { class: "js-external_rate", label: 'Default External Rate' } = link_to_remove_association 'Remove Categories', f, class: 'btn btn-primary' script | $('.js-category-select').on('change', function(e) { var optionSelected = $("option:selected", this).data('default_external_rate'); $(this).closest('.field').find('.js-external_rate').val(optionSelected) }); |
|
рони,
Спасибо Вам большое! |
Gidpoiiohika,
я не знаю формат в котором вы пишите код, не понимаю ваших обьяснений, возможно вам поможет делегирование. уберите все change с селектов, и добавьте их родителю. $('.js-category-select').on('change', function(e) заменить на $('селектор_родителя').on('change' , '.js-category-select',function(e) sel.change на $('селектор_родителя').on('change' , 'select',function(e) |
Цитата:
|
рони,
Спасибо Вам большое, я Вам отправил видео, сейчас буду пробовать. |
рони,
Здравствуйте, можете подсказать как можно переписать код что бы он работал когда я нажимаю на кнопку 'add categories' вот сам код script | var sel = $('.js-category-select'), opt = $('option:not(:first-child)', sel); function review(){ var chosen = sel.map(function(i, el){ return $(':selected',el); }); var category = 0; opt.show().prop('disabled', false); chosen.each(function(i, el){ category = $(el).val(); opt.not(el).filter(function(){ return $(this).val() == category; }).hide().prop('disabled', true); }); } sel.on('change', review) вот кнопка <fieldset id="categories_projects"><a class="btn btn-primary dropdown-toggle add_fields" data-association="categories_project" data-associations="categories_projects" data-association-insertion-template="<div class="nested-fields"><div class="field"><div class="form-group"><label class="control-label" for="project_categories_projects_attributes_new_categories_projects_category_id">Category</label><select class="form-control js-category-select" name="project[categories_projects_attributes][new_categories_projects][category_id]" id="project_categories_projects_attributes_new_categories_projects_category_id"><option value="">Select Category</option> <option data-default_external_rate="0" value="5">Management</option> <option data-default_external_rate="0" value="7">DevOps</option> <option data-default_external_rate="0" value="8">Design</option> <option data-default_external_rate="111" value="6">RoR Developer</option></select></div><div class="form-group"><label class="control-label" for="project_categories_projects_attributes_new_categories_projects_external_rate">Default External Rate</label><input class="form-control js-external_rate" type="text" name="project[categories_projects_attributes][new_categories_projects][external_rate]" id="project_categories_projects_attributes_new_categories_projects_external_rate" /></div><input type="hidden" name="project[categories_projects_attributes][new_categories_projects][_destroy]" id="project_categories_projects_attributes_new_categories_projects__destroy" value="false" /><a class="btn btn-primary remove_fields dynamic" href="#">Remove Categories</a></div></div><script>$('.js-category-select').on('change', function(e) { var optionSelected = $("option:selected", this).data('default_external_rate'); $(this).closest('.field').find('.js-external_rate').val(optionSelected) });</script><script>var sel = $('.js-category-select'), opt = $('option:not(:first-child)', sel); function review(){ var chosen = sel.map(function(i, el){ return $(':selected',el); }); var category = 0; opt.show().prop('disabled', false); chosen.each(function(i, el){ category = $(el).val(); opt.not(el).filter(function(){ return $(this).val() == category; }).hide().prop('disabled', true); }); } sel.on('change', review)</script>" href="#">add categories</a></fieldset> |
Gidpoiiohika,
не могу ... и не понимаю зачем нужны эти селекторы, чем код из поста №8 не устраивает https://javascript.ru/forum/499768-post8.html |
зависимые селекторы запрет одинакового выбора
Gidpoiiohika,
попытка номер раз ... :) код для медитации ... в качестве шаблона скрытый селект. <!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> .remove:after{ content: "Remove Category"; background-color: #0000FF; padding: 5px; margin: 5px; border-radius: 4px; } li{ margin: 15px; padding: 10px; } .patern{ display: none; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { $(".add").click(function() { var html = "<input><span class='remove'>"; var li = $("<li>").appendTo("ul"); var sel = $(".patern").clone(true).removeClass("patern").appendTo(li); $(html).appendTo(li); li.on("click", ".remove", function() { var data = sel.data("opt"); $(".form-control").not(sel).append($(data).clone()); li.remove() }) }); $("ul").on("change", ".form-control", function() { var i = this.selectedIndex; var value = this.value; var data = $(this).data("opt"); if (i) { $(".form-control").not(this).find("option[value='" + value + "']").remove(); $(this).data("opt", this.options[i]) } else $(this).removeData("opt"); if (data) $(".form-control").not(this).append($(data).clone()) }) }); </script> </head> <body> <ul> </ul> <select class="patern form-control js-category-select" > <option value="" >Select Category</option> <option data-default_external_rate="0" value="5">Management</option> <option data-default_external_rate="0" value="7">DevOps</option> <option data-default_external_rate="0" value="8">Design</option> </select> <input name="" type="button" value="Add Category" class="add"> </body> </html> |
Часовой пояс GMT +3, время: 00:55. |