Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中多次绑定事件侦听器_Javascript_Jquery_Parsing - Fatal编程技术网

在JavaScript中多次绑定事件侦听器

在JavaScript中多次绑定事件侦听器,javascript,jquery,parsing,Javascript,Jquery,Parsing,我正在尝试使用JavaScript逐级获取目录列表。 我将这个路径数组作为输入 var _paths = []; _paths.push("meta1/meta2/test/home/myself/hi.jpg"); _paths.push("meta1/meta2/test/home/myself/hi1.jpg"); _paths.push("meta1/meta2/test/home/myself/hi2.jpg"); _paths.push("meta1/meta2/test/work/

我正在尝试使用JavaScript逐级获取目录列表。
我将这个
路径
数组作为输入

var _paths = [];
_paths.push("meta1/meta2/test/home/myself/hi.jpg");
_paths.push("meta1/meta2/test/home/myself/hi1.jpg");
_paths.push("meta1/meta2/test/home/myself/hi2.jpg");
_paths.push("meta1/meta2/test/work/she/100.jpg");
_paths.push("meta1/meta2/test/work/she/110.jpg");
_paths.push("meta1/meta2/test/work/she/120.jpg");
_paths.push("meta1/meta2/test/work/hard/soft/she/120.jpg");
_paths.push("meta1/meta2/test/work/hard/soft/she/121.jpg");
_paths.push("meta1/meta2/test/work/she/220.jpg");
我想有一个“测试”作为输出,可以点击。单击“测试”后,应将其替换为“主页”和“工作”。点击“家”-“我自己”,点击“工作”-“努力”和“她”

我写道:


而且它只工作一次,只在单击“测试”时工作。

在绘制目录后,只需重新绑定侦听器即可。你只把它们绑一次,因此它们只能工作一次

将绑定函数包装到命名函数中:

function bindListeners(){
  $('.sub').click(function() {
    word = $(this).text();
    filteredArr = findString(_paths, word);
    drawList(filteredArr, word);
  });
}
并在
提取列表的末尾调用它:

var drawList = function (paths, word) {
  var folders = getFolders(paths, word);
  if (folders.length > 0) {
    $('.canvas').html('');
    for (i = 0; i < folders.length; i++) {
      $('.canvas').append("<div class='sub'>" + folders[i] + "</div><br />");
    }
  }
  bindListeners();
}
var drawList=函数(路径、字){
var folders=getFolders(路径、单词);
如果(folders.length>0){
$('.canvas').html('');
对于(i=0;i);
}
}
bindListeners();
}

.

如果有人对构建数据结构感到好奇:

(function iteratePaths() {
  var dirs = [];
  for(var i = 0; i < _paths.length; i++) {
    buildDirectories(dirs, _paths[i].split('/'));
  }
})();

function findDir(dir, obj) {
  for(var i = 0; i < dir.length; i++) {
    if(dir[i].name === obj.name) { 
      return dir[i];
    }
  }
  return undefined;
}

function buildDirectories(dir, subs) {
  if(subs.length === 0) return;
  var obj = {name: subs.shift(), dirs: []};

  var existingDir = findDir(dir, obj);
  if(!existingDir) {
    dir.push(obj);  
  }
  buildDirectories((existingDir || obj).dirs, subs);
}
(函数iteratePath(){
var-dirs=[];
对于(变量i=0;i<_path.length;i++){
构建目录(目录,_路径[i].split('/');
}
})();
函数findDir(dir,obj){
对于(变量i=0;i
是的,我做得不太对,如果子文件夹与父文件夹同名,则此操作可能会失败。不过,它适用于此列表。