Javascript onchange仅适用于select 3和" all"但不是介于两者之间

时间:2015-09-12 20:54:24

标签: javascript html events javascript-events

不确定为什么会发生这种情况,但我的javascript更改显示的过去事件的数量并不正常。只有第一个选择选项(3)和最后一个选项(全部)似乎触发了onchange事件。请查看我的代码并让我知道如果我做错了什么,我是一个刚接触js的php人。此外,我会在我的演示网站上发布它,直到我接受答案:http://aaron-schpitzer.ca/en/events

HTML(PHP)

echo '<tr><td><table class="invisible"><tr><td>Number Shown: <select id="select" onchange="changePast()"><option value="3">3</option><option value="10">10</option><option value="20">20</option><option value="'.count($pastEvents).'">All</option></select></td></tr></table></td></tr>';

JS

<script>
var pastEvents = <?php echo json_encode($pastEvents); ?>;
function changePast(){
    var e = document.getElementById("select")
    var selected = e.options[e.selectedIndex].value;
    var table = document.getElementById("past_events");
    if(table!=null){
        var innerhtml = "";
        for(i=0;i<selected;i++){
            innerhtml+='<table class="invisible"><tr><td><img src="/'+pastEvents[i]["banner"]+'" alt="Event Banner"></td></tr><tr><td>'+pastEvents[i]["name"]+'</td></tr></table>';
        }
        table.innerHTML = innerhtml;
    }

}

1 个答案:

答案 0 :(得分:0)

我已经弄明白了,过去只有5个测试事件,所以如果我选择一个数字,我需要检查该值是否大于#of对象,如果是,那么我需要使用object.length。这是for循环之前添加的代码:

if(selected>pastEvents.length){
            selected = pastEvents.length;
}