类似的文件名ajax

时间:2015-03-22 20:33:48

标签: javascript jquery html ajax

我创建了一个文本输入字段,用于检查服务器上的文件名。但是如果你想这样做,你必须得到真正的文件名。所以我需要一个解决方案来显示文件,即使输入文本不完全相同。

HTML:

<form method="GET">
    <img src="search.png" height="28" alt="search" title="" />
    <input name="search-item" type="text" placeholder="Suchen..." autocomplete="off" />
</form>
<div id="search_suggest">
</div>

jQuery / ajax:

$('input[name=search-item]').on('change keyup paste', function() {
    if($('input[name=search-item]').val() === ""){
        $('#search_suggest').hide();
    }
    var input_movie = 'video/' + $('input[name=search-item]').val() + '.avi';
    var input_thumbnail = 'video/Thumbnail/' + $('input[name=search-item]').val() + '.png';
    $.ajax({
        url: input_movie,
        type: 'GET',
        success: function() {
            $('#search_suggest').show();
            $('#search_suggest').html('<a href="' + input_movie + '"><div class="searchedFile"><img src="' + input_thumbnail + '" height="35" /><span>DeadFighters</span></div></a>');
        },
        error: function() {
            $('#search_suggest').hide();
        }
    });
});

顺便说一句,当然我的脚本有任何改进。

2 个答案:

答案 0 :(得分:1)

也许您可以使用Jquery UI Autocomplete

您需要一个可用的文件名列表,因此可能需要先设置一个ajax调用才能执行此操作。

然后,当用户在搜索字段中键入时,它将显示与您使用第一个Ajax调用构建的列表匹配的类似结果。

当用户选择建议的结果时,您将拥有确切的文件名,以便将文件名直接传递给您现在已经拥有的ajax调用。

似乎@Kaiido刚刚用不同的库回答了类似的解决方案。

答案 1 :(得分:0)

我认为,不应像@Quentin建议的那样在每个change keyup paste上调用您的服务器,而应该首先调用以获取可下载的每个文件的列表,将它们存储在数组中并使用Dave Porter最接近的字符串匹配库didyoumean.js,这似乎做得很好

var list_files=['fuzzy','duzzy','file', 'names'];
document.querySelector('input').addEventListener('keyup', function(){res.innerHTML=didYouMean(this.value, list_files)});
<script src="https://raw.githubusercontent.com/dcporter/didyoumean.js/master/didYouMean-1.2.1.js"></script>
<div id="res"></div>
<input type="text">