我有两个输入字段,每个字段都有一个下拉菜单。我正在做的是单击下拉菜单,我在其中有一个输入字段,该字段正在搜索该字段。
因此对于要搜索的两个下拉菜单,我都必须为此编写一个单独的搜索代码。我想要实现的是:
代码段
$.ajax({ //this one is to populate categorycode dropdwon
url: 'CategoryCode',
method: 'GET',
success: function(categoryCodeData) {
let dropdown = $('#itemCodeDropdown');
dropdown.empty();
dropdown.append('<input type="text" class="form-control" id="categorySearch" placeholder="search">');
$.each(categoryCodeData, function(key, entry) {
dropdown.append($('<a class="dropdown-item"></a>').attr('value', entry.name).text(entry.code).click(function() {
$(this).closest(".input-group").find("input").val($(this).text())
}))
});
},
'error': function(err) {}
})
$.ajax({
url: 'myurl',
method: 'GET',
success: function(itemCodeData) {
let dropdown = $('#itemCodeDropdown');
dropdown.empty();
dropdown.append('<input type="text" class="form-control" id="itemSearch" placeholder="search">');
$.each(itemCodeData, function(key, entry) {
dropdown.append($('<a class="dropdown-item"></a>').attr('value', entry.name).text(entry.code).click(function() {
$(this).closest(".input-group").find("input").val($(this).text())
}))
});
},
'error': function(err) {}
})
$("#itemCodeSearch").on("keyup", function() { //this is the search code i am writing for item code i have to write for category code also but with minimization of code
var value = $(this).val().toLowerCase();
$("#itemCodeDropdown a").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
});
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">
<div class="container">
<div class="form-row">
<div class="form-group col-xs-6 col-sm-6 col-md-6 col-lg-3">
<label for="itemCode">Item Code</label>
<div class="input-group">
<input type="text" class="form-control" aria-label="Text input with dropdown button" id="itemCodeInput">
<div class="input-group-append">
<button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
<div class="dropdown-menu dropdown-menu-right" id="itemCodeDropdown"></div>
</div>
</div>
</div>
<div class="form-group col-xs-6 col-sm-6 col-md-6 col-lg-3">
<label for="brandCode">Category Code</label>
<div class="input-group">
<input type="text" class="form-control" aria-label="Text input with dropdown button" id="brandCodeInput">
<div class="input-group-append">
<button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
<div class="dropdown-menu dropdown-menu-right" id="categoryCodeDropdown">
</div>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js"></script>
<script type="text/javascript" src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js"></script>
我已经写了一个代码来搜索item-code
,我在代码段中的那一行上做了注释。
现在要搜索category code
,我必须为此编写新的代码
因此,我想最小化代码,以便仅编写一个搜索代码,并且该代码可根据我定义的id
应用于所有下拉菜单
注意:在我的真实代码中,我有10多个input fields
,下拉菜单中我仅使用2
itemCodeData
[{"code":"1234","name":"banana"},{"code":"6962","name":"rice"},{"code":"5965","name":"icecream"},{"code":"5678","name":"cake"},{"code":"5678","name":"apple"},{"code":"9635","name":"grapes"}]
categoryCodeData
[{"code":"C001","name":"Beverages"},{"code":"C002","name":"Juices"},{"code":"C003","name":"Cookies"},{"code":"C004","name":"Breads"},{"code":"C005","name":"Biscuits"},{"code":"C006","name":"Savouries"}]
答案 0 :(得分:1)
您可以将输入作为条目添加到包含($dropdown, dropdownId, dropdownData)
元组的数组中,然后在其上循环:
// Add as many entries as you wish in this array
[
['#itemCodeDropdown', 'itemCodeSearch', 'itemUrl'],
['#categoryCodeDropdown', 'categorySearch', 'categoryUrl'],
].forEach(([selector, searchId, endpointUrl]) => {
// ...
}
使用虚拟端点URL进行演示:
[
['#itemCodeDropdown', 'itemCodeSearch', 'https://jsonplaceholder.typicode.com/posts'],
['#categoryCodeDropdown', 'categorySearch', 'https://jsonplaceholder.typicode.com/albums'],
].forEach(([selector, searchId, endpointUrl]) => {
$.ajax({
url: endpointUrl,
method: 'GET',
success: function(data) {
const dropdown = $(selector);
dropdown.empty();
dropdown.append('<input type="text" class="form-control" id="' + searchId + '" placeholder="search">');
$.each(data, function(key, entry) {
dropdown.append($('<a class="dropdown-item"></a>').attr('value', entry.id).text(entry.title).on('click', function() {
$(this).closest('.input-group').find('input').val($(this).text())
}));
});
$('#' + searchId).on('keyup', function() {
const value = $(this).val().toLowerCase();
$(selector + ' a').filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
});
});
},
'error': function(err) {}
})
});
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js"></script>
<script type="text/javascript" src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js"></script>
<div class="container">
<div class="form-row">
<div class="form-group col-xs-6 col-sm-6 col-md-6 col-lg-3">
<label for="itemCode">Item Code</label>
<div class="input-group">
<input type="text" class="form-control" aria-label="Text input with dropdown button" id="itemCodeInput">
<div class="input-group-append">
<button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
<div class="dropdown-menu dropdown-menu-right" id="itemCodeDropdown"></div>
</div>
</div>
</div>
<div class="form-group col-xs-6 col-sm-6 col-md-6 col-lg-3">
<label for="brandCode">Category Code</label>
<div class="input-group">
<input type="text" class="form-control" aria-label="Text input with dropdown button" id="brandCodeInput">
<div class="input-group-append">
<button class="btn btn-outline-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
<div class="dropdown-menu dropdown-menu-right" id="categoryCodeDropdown">
</div>
</div>
</div>
</div>
</div>
</div>