【问题标题】:'onclick' function not working“点击”功能不起作用
【发布时间】:2015-10-27 19:47:45
【问题描述】:

以下是我创建的jsp页面:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <html>
    <head>
        <title>Start</title>

    <link href="resources/css/StartPage.css" rel=stylesheet type="text/css"/>
    </head>
    <body>
    <div id="content">
        <div class="options">
        <label class="label">Name of Excel File
        <select name="filename" id="selectfile" class="active">
            <option selected disabled>---select---</option>
                    <c:forEach var="file" items="${exportedfiles}">
                        <option value="${file}"><c:out value="${file}"/></option>
                    </c:forEach>
                    <option value="custom">New file</option>
        </select>
        <input type="text" name="filename" id="fileinput"/>
        </label>
        </div>
        <input type="button" value="Edit" class="button" id="editbutton" onclick="editExcel()"/>
    </div>
    <script type="text/javascript">

                function editExcel(){
                    var filename;
                    var pageURL;
                    var select = document.getElementById("selectfile");
                    var input = document.getElementById("fileinput");
                    if(select.value == "custom"){
                        filename = input.value;
                        pageURL = "addTestCase";
                    }
                    else{
                        filename = select.options[select.selectedIndex].text;
                        pageURL = "import";
                    }
                    console.log(pageURL);
                window.location.href = pageURL+"?filename="+filename;
                }

                var editExcel = function(event){
                        var filename;
                        var pageURL;
                        var select = document.getElementById("selectfile");
                        var input = document.getElementById("fileinput");
                        if(select.value == "custom"){
                            filename = input.value;
                            pageURL = "addTestCase";
                        }
                        else{
                            filename = select.options[select.selectedIndex].text;
                            pageURL = "import";
                        }
                        console.log(pageURL);
                    window.location.href = pageURL+"?filename="+filename;
                }

                var takeInput = function(event){
                    var val = event.target.value;
                    var input = document.getElementById("fileinput");
                    var button = document.getElementById("editbutton");
                    if(val == 'custom'){
                        input.style.display = "block";
                        event.target.style.display = "none";
                        input.className = "active";
                        event.target.className = "";
                        button.value = "Create";
                    }
                    else{
                        input.style.display = "none";
                        event.target.style.display = "block";
                        input.className = "";
                        event.target.className = "active";
                        button.value = "Edit";
                    }
                }

                document.getElementById("selectfile").onchange = takeInput;
                document.getElementById("selectfile").addEventListener('change',takeInput,true);
                document.getElementById("editbutton").onclick = editExcel;
                document.getElementById("editbutton").addEventListener('click',editExcel,true);

        </script>
    </body>
    </html>

点击“editbutton”时,浏览器应该导航到在editExcel()中生成的URL。但是,该函数永远不会被调用。

除了在 javascript 中为“editbutton”添加事件侦听器并在标记中定义“onclick”属性外,我还尝试将脚本块移动到 head 块内,并尝试将 onclick 更改为 onClick。这些技巧似乎都不起作用。

类似的 javascript 代码适用于我的应用程序中的其他导航按钮。所以我相信永远不会生成“onclick”事件。

我有什么遗漏吗?

【问题讨论】:

  • 检查您的浏览器控制台,看看是否有任何错误
  • 通过在函数内部添加警告消息来调用该函数。
  • 为什么要在脚本代码中写两次函数定义?
  • 我尝试了不同的调用函数的方式。我也尝试添加一条警报消息,但没有出现。
  • 尝试在 javascript 的末尾关闭“function editExcel(){”,以便所有变量都在一个函数中

标签: javascript html onclick


【解决方案1】:
 <html>
    <head>
        <title>Start</title>

    <link href="resources/css/StartPage.css" rel=stylesheet type="text/css"/>
    </head>
    <body>
    <div id="content">
        <div class="options">
        <label class="label">Name of Excel File
        <select name="filename" id="selectfile" class="active">
            <option selected disabled>---select---</option>
                    <c:forEach var="file" items="${exportedfiles}">
                        <option value="${file}"><c:out value="${file}"/></option>
                    </c:forEach>
                    <option value="custom">New file</option>
        </select>
        <input type="text" name="filename" id="fileinput"/>
        </label>
        </div>
        <input type="button" value="Edit" class="button" id="editbutton" onclick="editExcel()"/>
    </div>
    <script type="text/javascript">

                function editExcel(){
                alert("asdd");
                    var filename;
                    var pageURL;
                    var select = document.getElementById("selectfile");
                    var input = document.getElementById("fileinput");
                    if(select.value == "custom"){
                        filename = input.value;
                        pageURL = "addTestCase";
                    }
                    else{
                        filename = select.options[select.selectedIndex].text;
                        pageURL = "import";
                    }
                    console.log(pageURL);
                window.location.href = pageURL+"?filename="+filename;

                     var editExcel = function(event){
                            var filename;
                            var pageURL;
                            var select = document.getElementById("selectfile");
                            var input = document.getElementById("fileinput");
                            if(select.value == "custom"){
                                filename = input.value;
                                pageURL = "addTestCase";
                            }
                            else{
                                filename = select.options[select.selectedIndex].text;
                                pageURL = "import";
                            }
                            console.log(pageURL);
                        window.location.href = pageURL+"?filename="+filename;
                    }
                     var takeInput = function(event){
                    var val = event.target.value;
                    var input = document.getElementById("fileinput");
                    var button = document.getElementById("editbutton");
                    if(val == 'custom'){
                        input.style.display = "block";
                        event.target.style.display = "none";
                        input.className = "active";
                        event.target.className = "";
                        button.value = "Create";
                    }
                    else{
                        input.style.display = "none";
                        event.target.style.display = "block";
                        input.className = "";
                        event.target.className = "active";
                        button.value = "Edit";
                    }
                }
                }

                document.getElementById("selectfile").onchange = takeInput;
                document.getElementById("selectfile").addEventListener('change',takeInput,true);
                document.getElementById("editbutton").onclick = editExcel;
                document.getElementById("editbutton").addEventListener('click',editExcel,true);

        </script>
    </body>
    </html>

试试这个:- 但是我仍然坚持在您有多个事件处理程序时使用 AJAX 以提高工作效率

【讨论】:

    【解决方案2】:

    原来的代码现在可以工作了。我在样式表中为#editbutton更改了一些值,它工作了!但我仍然没有弄清楚问题出在哪里,因为当我恢复到原来的值时按钮仍在工作。这是 CSS 文件:

    #content{
        background:#2A88AD;
        width:100%;
        height:100%;
    }
    
    #content label{
        display: block;
        position:fixed;
        left:40%;
        top:30%;
        width:20%;
        height:5%;
        font: bold 16px Arial, Helvetica, sans-serif;
        color: #fff;
    }
    
    select{
        width:100%;
        height:100%;
        padding: 8px;
        border-radius: 6px;
        -webkit-border-radius:6px;
        -moz-border-radius:6px;
        border: 2px solid #fff;
        box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.33);
        -moz-box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.33);
        -webkit-box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.33);
        font:500 17px Arial #000;
    }
    
    #selectfile *{
        background-color:transparent;
        font:500 17px Arial #fff;
        display:block;
        padding:8px;
    }
    
    #fileinput {
        display:none;
        width:100%;
        height:100%;
        padding: 8px;
        border-radius: 6px;
        -webkit-border-radius:6px;
        -moz-border-radius:6px;
        border: 2px solid #fff;
        box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.33);
        -moz-box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.33);
        -webkit-box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.33);
    }
    
    #editbutton{
        position:fixed;
        left:40%;
        top:55%;
        width:20%;
        height:5%;
        background: #fff;
        padding: 8px 20px 8px 20px;
        border-radius: 5px;
        -webkit-border-radius: 5px;
        -moz-border-radius: 5px;
        text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.12);
        color: #2A88AD;
        -moz-box-shadow: inset 0px 2px 2px 0px rgba(255, 255, 255, 0.17);
        -webkit-box-shadow: inset 0px 2px 2px 0px rgba(255, 255, 255, 0.17);
        box-shadow: inset 0px 2px 2px 0px rgba(255, 255, 255, 0.17);
        border: 1px solid #257C9E;
        font-size: 15px;
        font-weight: bold;
    }
    
    #editbutton:hover{
        color:#00B8E6;
    }
    
    .options{
        z-index: 2;
        position:fixed;
        left:40%;
        top:35%;
        width:20%;
        height:20%;
    }
    
    .options .active{
        display:block;
        z-index: 1;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-29
      • 2017-11-14
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多