【问题标题】:The functions .prev() and .closest() not working as expected函数 .prev() 和 .closest() 没有按预期工作
【发布时间】:2021-03-09 17:34:34
【问题描述】:

这是我的 .cshtml 代码:

<div class="col-xs-4 col-md-2">
    <div class="form-group">
        <input asp-for="FileName" type="hidden" class="hdnFileName" />
        <input type="file" asp-for="UploadFile" accept=".csv" />                
        <button id="btnUpload" class="btn btn-tertiary btnFileSelect" type="button">Browse</button>
    </div>
</div>

点击上传按钮时我需要文件名的 id。

脚本:

$(".btnFileSelect").each(function () {
    var btnId = $(this).attr("id");
    //The below code is not working and throwing an undefined value.
    //Tried .closest() which is not working either.
    var fileName = $(this).prev('.hdnFileName').attr('id');
})

变量文件名显示未定义。 我要改变什么?问题是隐藏字段吗?

【问题讨论】:

  • 这是您最终生成的 html 输出吗?里面没有 id 属性。如果它是从您的视图中获取的,请发布最终的 html 输出。
  • @ssilas777 - 我怀疑这不是最终输出,而是他们给 ASP.Net 的内容。 (本来有c#,不过好像没关系,应该加asp.net。)
  • 是的,现在更有意义了。

标签: javascript jquery asp.net


【解决方案1】:

prev 不扫描,它只会为前一个元素返回一个 jQuery 对象(如果选择器匹配)或空对象(如果不匹配)。来自文档:

获取匹配元素集中每个元素的前一个兄弟元素。如果提供了选择器,则仅当它与该选择器匹配时才会检索前一个兄弟。

(jQuery 的基于集合的特性使得这一点比它可能的稍微不那么清晰,但基本上如果匹配,您将获得前一个元素,如果不匹配,则不会获得。)

如果要扫描,请使用.prevAll().eq(0)。或者在这种情况下,我可能会使用siblings

var fileName = $(this).siblings('.hdnFileName').attr('id');

(我假设某些东西会在某个时候向该元素添加id,因为它在您显示的标记中没有。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 2016-10-10
    • 2016-04-08
    相关资源
    最近更新 更多