javascript - 如何从用户输入字段更改 JavaScript 变量(在 HTML 中)

标签 javascript html

我检查了很多帖子,但是要么

a) 他们对我不起作用
b) 或者我不理解他们

我已经将教科书的所有页面上传到一个网站,我正在从网站上一张一张地提取图像到一个 html 文件中,完成后我将上传到学校服务器。

我有通过 NextPrevious 按钮的页面导航系统。我现在正在尝试创建一种基于输入的方式来通过输入页面编号来访问页面。我尝试了一些我认为理论上应该可行

的东西

下面是我当前“网站”的代码片段。

function PlusPage() {
  a = a + 1
  b = "example.com/" + a + ".png"
  document.getElementById("page").src = b
}

var a = 1;
var b

function RemPage() {
  a = a - 1
  document.getElementById("demo").innerHTML = a
  b = "example.com/" + a + ".png"
  document.getElementById("page").src = b
}

function doStuff() {
  var nameElement = document.getElementById("someInput");
  a = nameElement.value
  b = "example.com/" + a + ".png"
}
<!DOCTYPE html>
<html>

<body>
  <button class="button button1" onclick="PlusPage()">Next Page </button>
  <button class="button button1" onclick="RemPage()">Previous Page </button>
  <br><br>
  <img id="page" src="example.com/1.png" alt="">
  <br>The below textbox should alter the page. but instead, the whole thing stops functioning.
  <input id="someInput" type="text">
  <input type="button" value="Go to Page" onClick="doStuff()">
</body>

</html>

最佳答案

您只是遗漏了 doStuff 函数中的一行简单代码: document.getElementById("page").src = b;。另外,如前所述,没有 ID 为 demo 的元素。


编辑

我还为您提供了一些验证,用户应该无法使用此实现转到小于 1 的页面,并且他们也不应该超过 355。如果您愿意,可以包含一些错误反馈,即无效数字、太低或太高等。

var a = 1;
var b;
var minPage = 1;

// change this to the last relevant page if you like 
var maxPage = 355; // got this from the Acknowledgements page 

function PlusPage() {
    
    // validation
    if (a  >= maxPage) { return; }
    
    a = a + 1
    b = "example.com/" + a + ".png"
    document.getElementById("page").src = b
}

function RemPage() {
    
    // validation
    if (a  <= minPage) { return; }
    
    a = a - 1
    b = "example.com/" + a + ".png"
    document.getElementById("page").src = b
}

function doStuff() {
    var nameElement = document.getElementById("someInput");
    
    // validation
    if (nameElement.value > maxPage) { return; }
    if (nameElement.value < minPage) { return; }
    
    a = nameElement.value;
    b = "example.com/" + a + ".png";
    document.getElementById("page").src = b;
}
<!DOCTYPE html>
<html>
    <head>
        <title>Book Navigation</title>
    </head>
    <body>
        <button class="button button1" onclick="PlusPage()">Next Page </button>
        <button class="button button1" onclick="RemPage()">Previous Page </button>
        <br>
        <br>
        <img id="page" src="example.com/1.png" alt="">
        <br>
        The below textbox should alter the page. but instead, the whole thing stops functioning.
        <input id="someInput" type="text">
        <input type="button" value="Go to Page" onClick="doStuff()">
    </body>
</html>


编辑2

这就是我个人的做法,使用 onclickonchange 等 HTML 属性被认为是不好的做法,因为您可以轻松做到在 JS 中。我知道这只是一个基本的 JS 应用程序,并没有真正需要争论什么是最好的方法,但作为一个有效且可靠的快速脚本,这就是我个人的做法。

注意,如果您的页面上有任何其他脚本,分离您的代码可能是个不错的主意,这很糟糕,在任何规模的项目中都需要在全局范围内处理,使用自调用函数允许代码运行就好像它只是放在全局范围内,但是您不能访问自调用函数之外的变量,例如添加控制台.log(a); 到 JS 的末尾,这将导致错误,因为变量 a 在全局范围内未定义。

另外,如果您在最后一行添加console.log(a);,虽然它会导致控制台错误,但实际上不会影响应用程序本身。因此,除了更易于管理之外,它还使代码本身更加可靠。

/**
 * @description this is a self invoked function, the purpose of
 * making this code into a self invoked function  is to ensure that 
 * this code does not interfere with any other potential code that  
 * you may have on the page, i.e. other js scripts/libs/framworks
 */
!function () {
    // change this to the last relevant page if you like 
    var maxPage = 355; // got this from the Acknowledgments page 
    var a = 1;
    var b = null;
    var minPage = 1;
    var $ = function(x) { return document.querySelector(x); };
    var events = function(x, y, fnc) {
        var list = x.split(" ");
        for (var i = 0; i < list.length; i ++) {
            y.addEventListener(list[i], fnc);
        }
        return void 0;
    };
    
    events("click", $('#nextPage'), PlusPage);
    events("click", $('#prevPage'), RemPage);
    events("keypress keyup keydown", $('#someInput'), doStuff);
  
  
    function goTo(p) {
        var start = "example.com/",
            end = ".png";
        $("#page").src = start + p + end;
    } 

    function PlusPage() {
        // validation
        if (a >= maxPage) { return; }
        goTo(++a);
    }

    function RemPage() {
        // validation
        if (a <= minPage) { return; }
        goTo(--a);
    }

    function doStuff() {
        var val = this.value;
        var firstPage = function () {
            b = "example.com/" + 1 + ".png";
            $("#page").src = b;
            return;
        };
        // validation
        if (val == '') { return firstPage(); } 
        if (isNaN(val)) { return; } // isNaN = is not a number 
        if (val > maxPage) { return; }
        if (val < minPage) { return; }
        a = val;
        b = "example.com/" + a + ".png";
        $("#page").src = b;
    }
}();
<!DOCTYPE html>
<html>
    <head>
        <title>Book Navigation</title>
    </head>
    <body>
        <button class="button button1" id="nextPage">Next Page </button>
        <button class="button button1" id="prevPage">Previous Page </button>
        <br>
        <br>
        <img id="page" src="example.com/1.png" alt="">
        <br>
        <p> 
            The below textbox should alter the page. 
            But instead, the whole thing stops functioning.
        </p>
        <input id="someInput" type="text">
    </body>
</html>

关于javascript - 如何从用户输入字段更改 JavaScript 变量(在 HTML 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49253605/

相关文章:

javascript - 在 Backgrid 列中添加元素

javascript - expressjs 文件上传,检查是否确实有文件发送,指定最大文件大小并保留其名称

javascript - 根据内容高度为多个 iFrame 设置唯一高度

javascript - 鼠标悬停时显示/隐藏 div

html - 表格单元格忽略宽度

javascript - 动画回调在错误的时间调用

javascript - xmlhttprequest 超时/中止未按预期工作?

javascript - 使用javascript添加到当前日期并有几个月的滚动

html - 我的 div 不向左浮动

html - 是否可以在 Google App Engine Go 中使用 CSS 创建电子邮件模板?