diff --git a/src/Orchard.Web/Modules/Orchard.Taxonomies/Scripts/admin-taxonomy-tags.js b/src/Orchard.Web/Modules/Orchard.Taxonomies/Scripts/admin-taxonomy-tags.js index 95033e84b..d20fc1da4 100644 --- a/src/Orchard.Web/Modules/Orchard.Taxonomies/Scripts/admin-taxonomy-tags.js +++ b/src/Orchard.Web/Modules/Orchard.Taxonomies/Scripts/admin-taxonomy-tags.js @@ -1,8 +1,8 @@ (function ($) { /* Helper functions - **********************************************************************/ - var createTermCheckbox = function ($wrapper, tag) { + **********************************************************************/ + var createTermCheckbox = function ($wrapper, tag, checked) { var $ul = $("ul.terms", $wrapper); var singleChoice = $(".terms-editor", $wrapper).data("singlechoice"); var namePrefix = $wrapper.data("name-prefix"); @@ -12,8 +12,8 @@ var checkboxId = idPrefix + "_Terms_" + nextIndex + "__IsChecked"; var checkboxName = namePrefix + ".Terms[" + nextIndex + "].IsChecked"; var radioName = namePrefix + ".SingleTermId"; - var checkboxHtml = ""; - var radioHtml = ""; + var checkboxHtml = ""; + var radioHtml = ""; var inputHtml = singleChoice ? radioHtml : checkboxHtml; var $li = $("
  • " + inputHtml + @@ -22,8 +22,8 @@ "" + "
  • ").hide(); - if (singleChoice) { - $("input[type='radio']", $ul).removeAttr("checked"); + if (checked && singleChoice) { + $("input[type='radio']", $ul).removeAttr("checked"); $("input[type='radio'][name$='IsChecked']", $ul).val("false"); } @@ -43,6 +43,7 @@ var $tagIt = $("ul.tagit", $wrapper); var singleChoice = $(".terms-editor", $wrapper).data("singlechoice"); var $terms = $("ul.terms", $wrapper); + var initialTags = $(".terms-editor", $wrapper).data("selected-terms"); if (singleChoice && action == "added") { $tagIt.tagit("fill", tag); @@ -50,8 +51,16 @@ $terms.empty(); - $($tagIt.tagit("tags")).each(function (index, tag) { - createTermCheckbox($wrapper, tag, this); + var tags = $tagIt.tagit("tags"); + $(tags).each(function (index, tag) { + createTermCheckbox($wrapper, tag, true); + }); + + // Add any tags that are no longer selected but were initially on page load. + // These are required to be posted back so they can be removed. + var removedTags = $.grep(initialTags, function (initialTag) { return $.grep(tags, function (tag) { return tag.value === initialTag.value }).length === 0 }); + $(removedTags).each(function (index, tag) { + createTermCheckbox($wrapper, tag, false); }); $(".no-terms", $wrapper).hide();