diff --git a/packages/yew-macro/src/html_tree/html_element.rs b/packages/yew-macro/src/html_tree/html_element.rs
index 143823c00b8..c1ef4e72c6a 100644
--- a/packages/yew-macro/src/html_tree/html_element.rs
+++ b/packages/yew-macro/src/html_tree/html_element.rs
@@ -428,8 +428,9 @@ impl ToTokens for HtmlElement {
#[allow(clippy::redundant_clone, unused_braces, clippy::let_and_return)]
let mut #vtag = match () {
_ if "input".eq_ignore_ascii_case(::std::convert::AsRef::<::std::primitive::str>::as_ref(vtag_name)) => {
- ::yew::virtual_dom::VTag::__new_textarea(
+ ::yew::virtual_dom::VTag::__new_input(
#value,
+ #checked,
#node_ref,
#key,
#attributes,
@@ -465,7 +466,8 @@ impl ToTokens for HtmlElement {
// For literal tags this is already done at compile-time.
//
// check void element
- if !::std::matches!(
+ if ::yew::virtual_dom::VTag::children(vtag).is_some() &&
+ !::std::matches!(
::yew::virtual_dom::VTag::children(vtag),
::std::option::Option::Some(::yew::virtual_dom::VNode::VList(ref #void_children)) if ::std::vec::Vec::is_empty(#void_children)
) {
diff --git a/packages/yew-macro/tests/html_macro/dyn-element-pass.rs b/packages/yew-macro/tests/html_macro/dyn-element-pass.rs
index e26369903ec..27dd094c0f9 100644
--- a/packages/yew-macro/tests/html_macro/dyn-element-pass.rs
+++ b/packages/yew-macro/tests/html_macro/dyn-element-pass.rs
@@ -60,4 +60,10 @@ fn main() {
}
}/>
};
+
+ let input_tag = "input";
+ let input_dom = ::yew::html! { <@{input_tag} /> };
+ assert!(
+ ::std::matches!(input_dom, ::yew::virtual_dom::VNode::VTag(ref vtag) if vtag.tag() == "input")
+ );
}