diff --git a/frameworks/core/components_ng/base/view_abstract.cpp b/frameworks/core/components_ng/base/view_abstract.cpp index ce07fad7eceebbc72677cf4bfe9f6518783e08fd..be5b5a3b72706eb3dd3111ed77ea2e5adc482dd1 100644 --- a/frameworks/core/components_ng/base/view_abstract.cpp +++ b/frameworks/core/components_ng/base/view_abstract.cpp @@ -7677,6 +7677,9 @@ void ViewAbstract::ClearJSFrameNodeOnClick(FrameNode* frameNode) auto gestureHub = frameNode->GetOrCreateGestureEventHub(); CHECK_NULL_VOID(gestureHub); gestureHub->ClearJSFrameNodeOnClick(); + auto* uiNode = reinterpret_cast(frameNode); + CHECK_NULL_VOID(uiNode); + uiNode->SetNodeEventRegistrationState(false); } void ViewAbstract::SetJSFrameNodeOnTouch(FrameNode* frameNode, TouchEventFunc&& touchEventFunc) diff --git a/frameworks/core/interfaces/native/node/node_api.cpp b/frameworks/core/interfaces/native/node/node_api.cpp index c9c2269567fa6afc04af379569b5c3a29b7ca25f..e977ca6c0566549ef06d8b76b30a420ee7554f7f 100644 --- a/frameworks/core/interfaces/native/node/node_api.cpp +++ b/frameworks/core/interfaces/native/node/node_api.cpp @@ -652,7 +652,7 @@ const ResetComponentAsyncEventHandler COMMON_NODE_RESET_ASYNC_EVENT_HANDLERS[] = nullptr, nullptr, NodeModifier::ResetOnAxisEvent, - nullptr, + NodeModifier::ResetOnClick, nullptr, NodeModifier::ResetOnHoverMove, }; diff --git a/test/unittest/core/base/view_abstract_test_ng_for_property_config.cpp b/test/unittest/core/base/view_abstract_test_ng_for_property_config.cpp index 6596082a57180ddbb491e076093e698cf87dcf07..3946d36939548ef627179529a4f43d87d020cc66 100644 --- a/test/unittest/core/base/view_abstract_test_ng_for_property_config.cpp +++ b/test/unittest/core/base/view_abstract_test_ng_for_property_config.cpp @@ -1742,4 +1742,35 @@ HWTEST_F(ViewAbstractTestNg, BackgroundResourceTest003, TestSize.Level1) ViewAbstract::SetBackgroundImageSizeUpdateFunc(BACKGROUNDSIZE, nullptr, "width"); EXPECT_TRUE(resMap.find("backgroundImageSizeWidth") == resMap.end()); } + +/** + * @tc.name: ViewAbstractClearJSFrameNodeOnClickTest001 + * @tc.desc: Test ClearJsFrameNodeOnClick. + * @tc.type: FUNC + */ +HWTEST_F(ViewAbstractTestNg, ViewAbstractClearJSFrameNodeOnClickTest001, TestSize.Level1) +{ + /** + * @tc.steps1: Create a FrameNode and set a native onClick event via SetJSFrameNodeOnClick. + * @tc.expected: The nodeEventRegistered should be true. + */ + auto frameNode = FrameNode::CreateFrameNode( + V2::BUTTON_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr()); + ASSERT_NE(frameNode, nullptr); + GestureEventFunc onClick = [](GestureEvent&) {}; + ViewAbstract::SetJSFrameNodeOnClick(AceType::RawPtr(frameNode), std::move(onClick)); + + auto* uiNode = reinterpret_cast(AceType::RawPtr(frameNode)); + ASSERT_NE(uiNode, nullptr); + auto currentInfo = uiNode->GetInteractionEventBindingInfo(); + EXPECT_EQ(currentInfo.nodeEventRegistered, true); + + /** + * @tc.steps2: ClearJSFrameNodeOnClick. + * @tc.expected: The nodeEventRegistered should be false. + */ + ViewAbstract::ClearJSFrameNodeOnClick(AceType::RawPtr(frameNode)); + currentInfo = uiNode->GetInteractionEventBindingInfo(); + EXPECT_EQ(currentInfo.nodeEventRegistered, false); +} } // namespace OHOS::Ace::NG \ No newline at end of file