Imaginez que j'ai une zone de texte (avec saisie semi-automatique 1.1, pas la dernière version de l'interface utilisateur) et une case à cocher. La zone de texte déclenche une page asp.net .ashx qui exécutera une procédure stockée sur le serveur sql et renverra les résultats.jQuery autocomplete: modifier la requête SQL en fonction de la case à cocher sélectionnée
Tout fonctionne, mais je veux ajouter une autre fonctionnalité. Lorsque la case est cochée, je souhaite que stored_procedure_1 soit exécuté. Si la case n'est pas cochée, stored_procedure_2 doit être exécuté. La case à cocher n'est pas cochée par défaut.
Ma question: Comment puis-je indiquer la page ashx si la case est cochée ou non? Par défaut, la saisie semi-automatique déclenchera quelque chose comme: autocompletedata.ashx? Q = myname et qui exécutera stored_procedure_2, mais lorsque la case est cochée, elle doit déclencher autocompletedata.ashx?q=myname&mycheckbox=begin
afin que stored_procedure_1 soit exécuté.
Dois-je ajouter du code jQuery pour passer la case cochée? Je suis totalement perdu ..
Merci d'avance.
éléments de formulaire:
<input id="search_employee" type="text" class="employee" />
<input type="checkbox" name="mycheckbox" value="begin" />
jQuery:
$().ready(function() {
$("#search_employee").autocomplete("includes/AutocompleteData.ashx", {
minChars: 3,
max: 15,
selectFirst: false,
scrollHeight: 300,
formatItem: function(data, i, n, value) {
if (value.split("_")[3]!== null)
{
return "<img style = 'width:40px;height:53px;float:left; margin:2px 5px 2px 0' src='/pictures/thumbs/"
+ value.split("_")[3] + "'/> " + value.split("_")[0] + "<br /><span class=smallname>" + value.split("_")[2] + "<br/>" + value.split("_")[4] + "</span>";
}
},
formatResult: function(data, value) {
return value.split("_")[0];
}
});
Une partie de autocompletedata.ashx:
Dim searchname As String = context.Request.QueryString("q")
Dim searchstart as string = context.Request.QueryString("mycheckbox")
Dim searchsql as string
if searchstart = "begin" then
searchsql = "stored_procedure_1"
else
searchsql = "stored_procedure_2"
end if
Dim conn As SqlConnection = New SqlConnection
conn.ConnectionString = ConfigurationManager.ConnectionStrings("MyConn").ConnectionString
Dim cmd As SqlCommand = New SqlCommand
cmd.CommandType = Data.CommandType.StoredProcedure
cmd.CommandText = searchsql.ToString
cmd.Parameters.AddWithValue("@SearchText", searchname)
Merci de m'avoir aidé dans la bonne direction :) Quand j'ajoute "extraParams: {'mycheckbox': 'begin'}" il appellerait en effet stored_procedure_1. C'est un pas de plus. Mais il ne faut ajouter ces extraparamètres que lorsque la case est cochée (ou sinon retourner false). Comment (et où) dois-je définir dynamiquement la valeur de la case à cocher? –
Que voulez-vous dire "return false"? D'après l'apparence de votre code, si le CB est coché, vous voulez appeler SP1, sinon SP2 - n'est-ce pas? Vous ne serez pas en mesure de passer "begin" ou null, restez simple - passez simplement l'attribut checked directement à l'ASHX: 'extraParams: {flag: $ (" # idOfYourCheckbox "). Attr (" checked ")}' . – RPM1984
Merci, ça l'a fait! –