Mon code fonctionne parfaitement mais ma seule préoccupation est de savoir comment puis-je valider si la valeur ajoutée existe déjà sur la table. C'est ce que j'ai fait.
$(document).ready(function(){
var i = 0;
$(".add-row").click(function(){
i++;
var name = $("#name").val();
var markup = '<tr id="row'+i+'"> <td> <button type="button" name="remove" id="'+i+'" class="btn_remove">Delete </button> </td> <td> <input type="text" value="'+name+'" name="owners"> '+name+'</td> </tr>';
if(name != '-') {
if ($('#dynamic_field').has(name)) {
alert('already exists in the table');
} else {
$('#dynamic_field').append(markup);
}
}
});
$(document).on('click', '.btn_remove', function(){
var button_id = $(this).attr("id");
$('#row'+button_id+'').remove();
});
});
Ma préoccupation ne concerne que le if ($ ('# dynamic_field'). Has (name)) partie. Je veux valider s'il existe déjà.
<body>
<form>
<select id="name">
<option value="-">-</option>
<option value="Mark">Mark</option>
<option value="James">James</option>
<option value="Steve">Steve</option>
</select>
<input type="button" class="add-row" value="Add Row">
</form>
<table id="dynamic_field"></table>
3 Réponses :
Il vous suffit d'utiliser le sélecteur pour récupérer une valeur existante dans une table.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
<select id="name">
<option value="-">-</option>
<option value="Mark">Mark</option>
<option value="James">James</option>
<option value="Steve">Steve</option>
</select>
<input type="button" class="add-row" value="Add Row">
</form>
<table id="dynamic_field"></table>
$(document).ready(function(){
var i = 0;
$(".add-row").click(function(){
i++;
var name = $("#name").val();
var markup = '<tr id="row'+i+'"> <td> <button type="button" name="remove" id="'+i+'" class="btn_remove">Delete </button> </td> <td> <input type="text" value="'+name+'" name="owners"> '+name+'</td> </tr>';
if(name != '-') {
var isExists=false;
$("#dynamic_field tr input").each(function(){
var val=$(this).val();
if(val==name)
isExists=true;
}).val()
if (isExists) {
alert('already exists in the table');
} else {
$('#dynamic_field').append(markup);
}
}
});
$(document).on('click', '.btn_remove', function(){
var button_id = $(this).attr("id");
$('#row'+button_id+'').remove();
});
});
.has () renvoie l'élément jquery, vous devez donc vérifier la longueur et puisque le nom est variable et non un sélecteur, vous devez donc y associer l'attribut value.
if( $('#dynamic_field').has(":input[value="+name+"]").length ) {
alert('already exists in the table');
}
Si cela ne vous dérange pas d'utiliser un peu de JS vanilla, vous pouvez profiter de la méthode (relativement nouvelle) querySelectorAll qui prend une chaîne de sélection similaire à celle de jQuery, et est un peu plus rapide depuis , eh bien, c'est du simple JS.
Puisque vous nommez les entrées, vous pouvez aussi bien utiliser leur attribut name pour les sélectionner:
'#dynamic_field input [name = owner]' sélectionne les entrées document.querySelectorAll ('# dynamic_field input [name = owner]') renvoie une liste de nœuds Array.from (document.querySelectorAll ('# dynamic_field input [name = owner]')) convertit ladite liste de nœuds en un tableau afin que nous puissions utiliser some () dessus Array.from (document.querySelectorAll ('# dynamic_field input [name = owner]')). some (input => input.value === name); renvoie true s'il y a au moins un élément qui satisfait à la condition input.value === name .
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
<select id="name">
<option value="-">-</option>
<option value="Mark">Mark</option>
<option value="James">James</option>
<option value="Steve">Steve</option>
</select>
<input type="button" class="add-row" value="Add Row">
</form>
<table id="dynamic_field"></table>
$(document).ready(function(){
var i = 0;
$(".add-row").click(function(){
var name = $("#name").val();
var markup = '<tr id="row'+i+'"> <td> <button type="button" name="remove" id="'+i+'" class="btn_remove">Delete </button> </td> <td> <input type="text" value="'+name+'" name="owners"> '+name+'</td> </tr>';
if(name !== '-'){
const exists = Array.from(
document.querySelectorAll(
'#dynamic_field input[name=owners]'
)).some(input => input.value === name);
if (exists) {
alert('already exists in the table');
} else {
i++;
$('#dynamic_field').append(markup);
}
}
});
$(document).on('click', '.btn_remove', function(){
var button_id = $(this).attr("id");
$('#row'+button_id+'').remove();
});
});
vous pouvez essayer d'utiliser $ ('# dynamic_field'). find (": input [value =" + name + "]"). length