我声明了两个变量,COURSE_ID_List和COURSE_ID_timerId。然后将它们作为参数从OnKeyUp事件传递给SetFilter函数。

如果列表未定义,则应对其进行初始化。问题是列表始终是未定义的,因此我假设OnKeyUp事件中使用的COURSE_ID_List是按值而不是按引用传递的。我该如何解决?

谢谢

<script type="text/javascript">

function SetFilter(ddl, value, list, timerId) {
  if (list == undefined)
    list = new ListFilter(ddl);
  clearTimeout(timerId);
  timerId = setTimeout(function() { list.SetFilter(value);}, 1500);
}

var COURSE_ID_List;
var COURSE_ID_List_timerId;

</script>

<input name="Course" type="text" id="COURSE_ID" onKeyUp="SetFilter('COURSE_ID', this.value, COURSE_ID_List, COURSE_ID_List_timerId);" />

最佳答案

我认为这可能是您正在寻找的答案。

(function() {
    var COURSE_ID_List = {},
    COURSE_ID_List_timerId = {};
    window.setFilter=function(ddl, value) {
        var list = COURSE_ID_List[ddl];
        if (!list) {
            list = new ListFilter(ddl);
        } else if(list.getFilter() == value) {
            return;
        }
        var timerId = COURSE_ID_List_timerId[ddl];
        if (timerId) {
            clearTimeout(timerId);
        }
        COURSE_ID_List_timerId[ddl] = setTimeout(function() { list.SetFilter(value); }, 1500);
        COURSE_ID_List[ddl] = list;
        return;
    }
})();




<input name="Course" type="text" id="COURSE_ID" onkeyup="setFilter('COURSE_ID', this.value);" onblur="setFilter('COURSE_ID', this.value);" />

08-18 23:34