diff --git a/yesod-form-multi/Yesod/Form/MultiInput.hs b/yesod-form-multi/Yesod/Form/MultiInput.hs index 53446e17..1afde113 100644 --- a/yesod-form-multi/Yesod/Form/MultiInput.hs +++ b/yesod-form-multi/Yesod/Form/MultiInput.hs @@ -229,7 +229,7 @@ mhelperMulti field@Field {..} fs@FieldSettings {..} wrapperClass defs minVals Mu cfs = FieldSettings "" Nothing (Just cid) (Just cName) [("hidden", "true")] mkName i = name `T.append` (T.pack $ '-' : show i) mkId i = theId `T.append` (T.pack $ '-' : show i) - mkNames c = [(mkName i, mkId i) | i <- [0 .. c]] + mkNames c = [(i, (mkName i, mkId i)) | i <- [0 .. c]] onMissingSucc _ _ = FormSuccess Nothing onMissingFail m l = FormFailure [renderMessage m l MsgValueRequired] isSuccNothing r = case r of @@ -256,7 +256,9 @@ mhelperMulti field@Field {..} fs@FieldSettings {..} wrapperClass defs minVals Mu if cDef == 0 then [(FormMissing, Left "")] else [(FormMissing, Right d) | d <- defs] - Just p -> mapM (\n -> mkRes field fs p mfs n onMissingSucc (FormSuccess . Just)) (map fst $ mkNames counter) + Just p -> mapM + (\n -> mkRes field fs p mfs n onMissingSucc (FormSuccess . Just)) + (map (fst . snd) $ mkNames counter) -- delete button @@ -264,17 +266,33 @@ mhelperMulti field@Field {..} fs@FieldSettings {..} wrapperClass defs minVals Mu -- each delete button to ensure that the function only gets included once. let delFunction = toWidget [julius| - function deleteField(field) { + function deleteField(wrapper) { var numFields = $("." + #{wrapperClass}).length; if (numFields == 1) - field.val(""); + { + wrapper.find("*").each(function() { + removeVals($(this)); + }); + } else - field.parent().parent().remove(); + wrapper.remove(); + } + + // input types where we don't want to reset the value + const keepValueTypes = ["radio", "checkbox", "button"]; + + function removeVals(e) { + // uncheck any checkboxes or radio fields and empty any text boxes + if(e.prop('checked') == true) + e.prop('checked', false); + + if(!keepValueTypes.includes(e.prop('type'))) + e.val(""); } |] - mkDelBtn fieldId = do + mkDelBtn fieldId wrapperClass = do let delBtnId = delBtnPrefix <> fieldId [whamlet|