是否可以根据输入字段是否已获得焦点来触发破折号回调?

Is it possible to trigger a dash callback based on whether an Input field has been focused?

如标题所示,我想在聚焦时触发破折号回调,即单击 dcc.Input 字段。

AFAIK 只能在输入字段通过 n_blur 属性 失去焦点时触发一个。我已经检查了 n_clicked 属性 是否存在作为按钮的那个,但是,它并没有导致任何地方。

这是一个棘手的解决方法,但是 html.Div 确实有 n_clicks 属性。所以你可以做的是用 div 包围你的输入,并使 div 具有与你的输入大致相同的尺寸,这样点击输入就会触发周围的 div' s n_click,但在输入外单击不会。

MWE

from dash import dash, html, dcc
from dash.dependencies import Input, Output

app = dash.Dash(__name__)
app.layout = html.Div(
    id="input-container",
    children=[
        dcc.Input(id="input", type="number"),
        dcc.Store(id='throwaway-result-store')
    ],
    style={"width": "fit-content"}
)


@app.callback(
    Output("throwaway-result-store", "data"),
    Input("input-container", "n_clicks"),
)
def handle_focus(n_clicks):
    print(f"number of times input clicked {n_clicks}")
    return n_clicks


if __name__ == "__main__":
    app.run_server()

您可以像您提到的那样在输入中使用 n_blur 属性 来处理模糊。