avevo bisogno di utilizzare un elenco a discesa che potrebbe fare tale funzionalità:bootstrap-selezionare con pulsanti personalizzati e aggiungere nuovi valori onthe fly
- recupera in modo dinamico e valori carica dal database
- ha una casella di ricerca incorporata
- dispone di 2 pulsanti personalizzati su ogni Li, uno per l'eliminazione e uno per la modifica.
- il campo di ricerca, se il testo cercato non esiste, aggiungerlo su "invio" premere, sulla stessa selezione e anche sul database con Ajax.
ho scelto il costume selezionare per 'bootstrap-select' @twitter bootstrap dalla repository git silviomoreto e perché non ho trovato la funzionalità che voglio ho cercato di fare per conto mio.
Quindi, per coloro che necessitano o vorranno aggiungere tale funzionalità nelle proprie app Web, annoto la mia soluzione, che non è la soluzione migliore ma funziona, e sono aperto a qualsiasi suggerimento per farlo funzionare meglio.
1. passo: creare un selectpicker con i parametri: dati-size = "5" (Mostra 5 valori e la barra di scorrimento aggiuntivo), i dati-live-search = "true" (aggiungere la casella di ricerca su la parte superiore) e caricare i valori che mi da db (preferibilmente con l'Ajax):
<select class="selectpicker typedropdown" data-size="5" data-live-search="true">
<?php
$counter=0;
foreach($eventTypeList as $evType){
$counter++;
if(is_array($evType)){
echo "<option>".$evType['type_name']."</option>";
}else{
echo "<option>".$evType."</option>";
}
} ?>
</select>
2. passo: aggiungere i pulsanti personalizzati (modificare, cancellare) (ignorare la funzione prototipo ' createLi ')
ignorare la funzione prorotype 'createLi' sul vostro file js principale in questo modo:
$.fn.selectpicker.Constructor.prototype.createLi = function(){..}
Interno:
var generateLI = function (content, index, classes, optgroup) {
return '<li' + ........
poco prima del 'ritorno' aggiungere la riga con tha due classi dei pulsanti:
content += "<div class='removeTypebtn'></div><div class='editTypebtn'></div>";
in modo che, quando si creano gli elementi li si crea anche il due pulsanti personalizzati su ogni riga.
3. passo: cattura 'clicca su' Eventi per modificare & valore di eliminazione (fa anche una richiesta AJAX sul database per aggiornare il DBTABLE)
$(document.body).on('click','.btn-group.typedropdown .dropdown-menu ul li .removeTypebtn',function(event){
var index = $(event.target).closest("li").data('original-index');//get the item index
var type_name = $(event.target).closest("li").text();
deleteType(index,type_name);
});
in modo simile catturiamo l'evento "clic" per "modifica oggetto", quindi lo ometto.
ora abbiamo bisogno di fare la parte interessante, per eliminare l'elemento selezionato dalla selectpicker e anche fare una richiesta AJAX per eliminarlo dalla DBTABLE. il database è oltre l'ambito del tutorial quindi, lo lascio fuori. prestare attenzione all'interno della funzione di successo come rimuovo.
function deleteType(index,type_name){
var url = "<?php echo $domain.$deleteType; ?>";
data = {'index':index,'type_name':type_name};
$.ajax({
cache: false,
url : url,
type: "POST",
data : data,
success : function(data, textStatus, jqXHR){
$('.typedropdown').find('[data-original-index=$index]').remove();//remove selected item from selectpicker
$('.typedropdown').find('option:contains($type_name)').remove();";// remove value also from the hidden select
$('.selectpicker.typedropdown').selectpicker('val', []);//clear selected
},
error : function(xhr, ajaxOptions, thrownError){
alert(thrownError);
}
});
}
4. passo: creare la funzionalità 'aggiungi nuovo valore' su Inserisci (come sapete il campo di ricerca permette solo ricerche all'interno del Li)
così, quando abbiamo init il componente selectpicker, si modifica il messaggio "noneResultsText", modificando il parametro : noneResultsText:
//init selectpicker
selectPickerType = $('.selectpicker.typedropdown').selectpicker({
noneResultsText:'Add new {0}',
selectOnTab: true
});
così, ora ogni volta che scriviamo una nuova parola che non esiste, si ottiene il messaggio Aggiungi nuovo 'myword'
Ora abbiamo bisogno di catturare l'evento click.
$('.selectpicker.typedropdown').data('selectpicker').$searchbox.on('keydown',function(e){
if(e.keyCode == 13){
addNewDropdownValue(e.target.value,'type');
return false;
}
});
e la funzione di addNewDropdownValue: (con una richiesta Ajax per DBTable per aggiungere il nuovo valore) (prestare attenzione alla funzione di successo)
function addNewDropdownValue(newValue,tble){
var url = "<?php echo $domain.$addDropdownValueURL; ?>";
data = {'newValue':newValue,'tble':tble};
var loading = $('.loading');
$.ajax({
cache: false,
url : url,
type: "POST",
data : data,
beforeSend: function(xhr) {
loading.css('top',screen.height/2);
loading.css('left',screen.width/2);
loading.html('<div><img alt="loading..." src="<?php echo $domain; ?>/assets/images/loader/ajax_loader_blue_48.gif" /></div>').show();
},
success : function(data, textStatus, jqXHR){
loading.fadeOut(500);
$('.selectpicker.".$tble."dropdown').append('<option selected>$newValue</option>');//append new item on the selectpicker
$('.selectpicker.".$tble."dropdown').val('$newValue');//select the new value
$('.selectpicker.".$tble."dropdown').selectpicker('refresh');//refresh the selectpicker
$('.".$tble."dropdown').removeClass('open');//close the selectpicker
},
error : function(xhr, ajaxOptions, thrownError){
alert(thrownError);
}
});
}
il gioco è fatto, ora abbiamo un selettore di selezione bootstrap personalizzato con i pulsanti cancella e modifica su ogni riga e aggiungi nuove funzionalità di testo su invio.
per favore con qualsiasi mezzo, dimmi la tua opinione su come possiamo farlo funzionare meglio o se avete domande.
_ "Per favore, in ogni caso, dimmi la tua opinione su come possiamo farlo funzionare meglio ... "_ - questa è la tua domanda? Se è così, le revisioni del codice sono fuori tema per SO. Vedi [http://codereview.stackexchange.com/](http://codereview.stackexchange.com/) – Turnip
ovviamente no, questa è una piccola guida/tutorial su come puoi fare in modo che quel componente personalizzato funzioni in quel modo! ! –
Questo è un q & a sito, non un tutorial/repository di codice temo – Turnip