更新
专门回答你的问题。
您正在使用 InvokeVoidAsync 调用,如您所见,它返回一个 void。如果您使用 InvokeAsync 调用,则会返回一个空的 JsonDocument 对象。
所以不,你不能从 js 调用中得到可用的引用。
澄清问题之前的上一个答案
==================================================== ========== 如果我正确阅读了您的问题,您希望将焦点设置为id
“一般”生成的 html 元素。
下面的答案显示了如何使用Element
或设置焦点id
。
使用以下代码将 a 添加site.js
到wwwroot :
window.SetElementFocus = function (element) {
element.focus();
return element === true;
}
window.SetFocusByElementId = function (elementId) {
var element = document.getElementById(elementId);
element.focus();
return element === true;
}
引用启动文件中的 js 文件(这是用于服务器的)
<script src="/site.js"></script>
<script src="_framework/blazor.server.js"></script>
然后这里是一个演示页面。
@page "/Test6"
<div class="m-2">
<input type="text" @ref="Input1" placeholder="Input 1" id="input1" />
</div>
<div class="m-2">
<input type="text" @ref="Input2" placeholder="Input 2" id="input2" />
</div>
<div class="m-2">
<input type="text" @ref="Input3" placeholder="Input 3" id="input3" />
</div>
<div class="m-2 p-2">
<button class="btn btn-dark me-1" @onclick="() => Focus(1)">Element Focus 1</button>
<button class="btn btn-dark me-1" @onclick="() => Focus(2)">Element Focus 2</button>
<button class="btn btn-dark me-1" @onclick="() => Focus(3)">Element Focus 3</button>
</div>
<div class="m-2 p-2">
<button class="btn btn-secondary me-1" @onclick="() => FocusById(1)">Id Focus 1</button>
<button class="btn btn-secondary me-1" @onclick="() => FocusById(2)">Id Focus 2</button>
<button class="btn btn-secondary me-1" @onclick="() => FocusById(3)">Id Focus 3</button>
</div>
@code {
[Inject] private IJSRuntime _js { get; set; }
private ElementReference Input1;
private ElementReference Input2;
private ElementReference Input3;
private async Task Focus(int no)
{
var input = no switch
{
1 => Input1,
2 => Input2,
_ => Input3
};
await _js.InvokeAsync<bool>("SetElementFocus", input);
}
private async Task FocusById(int no)
{
var input = no switch
{
1 => "input1",
2 => "input2",
_ => "input3"
};
await _js.InvokeAsync<bool>("SetFocusByElementId", input);
}
}