【问题标题】:document.getElementById('textbox').focus() not working after submit form提交表单后 document.getElementById('textbox').focus() 不起作用
【发布时间】:2017-08-24 11:19:27
【问题描述】:

我正在尝试实现一个简单的表单,并尝试在提交后将焦点设置在表单中的第一个文本框上,但它不起作用。我无法在此站点上使用代码 sn-p,因为我使用的是 localStorage,它不允许我使用它)

这是我在 Codepen 上的代码:http://codepen.io/anon/pen/ZemVpz

以下是我的 HTML 的外观,以供快速参考:

document.getElementById('formBookmark').addEventListener('submit', addBookmark);

function addBookmark(e) {
    var siteName = document.getElementById('txtSiteName').value;
    var siteUrl = document.getElementById('txtSiteUrl').value;
    if (!validate(siteName, siteUrl)) {
        alert("Please fill the blank fields");
        return;
    }

    var newBookmark = {
        siteName: siteName,
        siteUrl: siteUrl
    }

    var bookmarks = getlocalBookmarks() || [];

    bookmarks.push(newBookmark);
    localStorage.setItem('tf-bookmarks',JSON.stringify(bookmarks));
    //trying to set focus here
    document.getElementById(formBookmark).reset();
    document.getElementById("txtSiteName").focus();
    
    fetchBookmarks();
    e.preventDefault();
   
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

<form id="formBookmark">
                <div class="form-group">
                    <label for="txtSiteName">Site Name:</label>
                    <input type="text" name="txtSiteName" id="txtSiteName" class="form-control" placeholder="Google" />
                </div>
                <div class="form-group">
                    <label for="txtSiteUrl">Site Url:</label>
                    <input type="text" name="txtSiteUrl" id="txtSiteUrl" class="form-control" placeholder="http://google.com"/>
                </div>
                <button class="btn btn-success" id="btnAddLink" type="submit">Add Bookmark</button>
            </form>

我可以使用 body onload 事件来执行此操作,但如果我在页面上有多个表单怎么办。为什么那行通过 JS 设置焦点的代码行不通?

谢谢。

【问题讨论】:

    标签: javascript html forms focus


    【解决方案1】:

    别担心,这只是一个小错字 - 您忘记在此处的“formBookmark”周围添加引号:

    //trying to set focus here
    document.getElementById(formBookmark).reset();
    document.getElementById("txtSiteName").focus();
    

    不要忘记使用“开发者工具”控制台来快速捕捉此类错误。 为了完整起见,可以在此处找到 Chrome 的“开发者工具”:

    现在控制台清楚地显示了在您尝试 .focus() 之前,您的代码如何在 .reset() 调用中崩溃:

    【讨论】:

    • 谢谢,但是当我在本地运行它时,页面重新加载,我在控制台中看不到任何内容。 e.preventDefault() 不应该阻止页面加载吗?
    • 是的,它应该阻止并且确实阻止页面在我提交表单时加载。在 codepen.io 和本地测试 - 一切正常(如预期):当我注释掉“e.preventDefault();”时然后它会在提交时重新加载页面。尝试添加“警报(123);”在您的“e.preventDefault()”行之后 - 它是否被执行(如果一切正常,您应该会看到警报弹出窗口)或者您忘记在本地设置中添加前面提到的引号?-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 2012-09-28
    • 2016-04-06
    • 2013-03-16
    相关资源
    最近更新 更多