Est-il possible d'utiliser la propriété onclientclick
d'un bouton pour effectuer une vérification côté client? Si la vérification renvoie true
, activez l'événement onclick
. Si la vérification côté client renvoie false
, ne déclenchez pas l'événement onclick
.
Est-ce possible?
METTRE À JOUR:
Ces 2 fonctionnent:
Stops the form from submitting:
OnClientClick="return false;"
Allows the form to submit:
OnClientClick="return true;"
Les 2 prochains ne fonctionnent pas:
// in js script tag
function mycheck() {
return false;
}
// in asp:button tag
OnClientClick="return mycheck();"
// in js script tag
function mycheck() {
return true;
}
// in asp:button tag
OnClientClick="return mycheck();"
Il soumet le formulaire les deux fois.
Pourquoi donc?
Vous souhaitez ajouter return
dans OnClientClick après l’appel d’une fonction. Sinon, le bouton reviendra même si la fonction renvoie false.
<asp:button ID="Button1" runat="server" OnClick="Button1_Click"
OnClientClick="return checkValidation()" Text="Submit" />
<script type="text/javascript">
function checkValidation() {
return confirm('Everything ok?');
}
</script>
Sûr. Si vous utilisez return false
dans votre OnClientClick
, cela empêchera toute navigation. Donc, votre code ressemblerait à ceci:
<asp:LinkButton runat="server" OnClientClick="if(!ValidatePage()) { return false;}" />
Oui, vous pouvez, en appel de fonction onclientClick, utiliser preventDefault()
function onclientClickFun(e)
{
if(!IsValidationSuccess)
{
e.preventDefault();
}
}
OU
function onclientClickFun(e)
{
if(!IsValidationSuccess)
{
return false;
}
}
Dans la page du serveur, créez le bouton :
var button1 = new Button();
button1.ServerClick += new EventHandler(button1_ServerClick);
button1.OnClientClick = SetJsForSaveBtn();
button1.Attributes.Add("UseSubmitBehavior", "false");
panel.Controls.Add(button1 );
// contient le code du serveur
private void saveBtn_ServerClick(object sender, EventArgs e)
{
//do something if ClientClick returns true
}
// contient le code JS de la page
LiteralControl js = new LiteralControl();
panel.Controls.Add(js);
js.Text =@"<script type='text/javascript'>
$(document).ready(function(){
function CheckValidationOnClient(){
if(!ValidatePage()){
return false;
}
else{
return true;
}
};
});
</script> ";
private string SetJsForSaveBtn()
{
var jsfunc = @" return CheckValidationOnClient()";
return jsfunc ;
}
Je suis tombé sur ce problème aussi. N'aimait pas avoir à mettre le OnClientClick = retourne faux sur chaque lien. Avec une simple page, il est tout simplement plus facile d’utiliser une ancre et d’éviter de remplir le href pour vous.
Cependant, ce n'est pas toujours possible. Donc, une conclusion simple consiste à hériter du LinkButton et à ajouter une variable comme AutoPostBack. si false, remplacez simplement la sortie par le code HTML ou ajoutez le code OnClientClick. Je n'aime pas vraiment les balises inline.
namespace My.WebControls {
[ToolboxData("<{0}:LinkButton runat=server ID=btn></{0}:LinkButton>"), ParseChildren(true), ToolboxItem(true)]
public class LinkButton : System.Web.UI.WebControls.LinkButton {
private bool _postback = true;
[Bindable(true), Category("Behavior"), DefaultValue(true), Description("Gets or Sets the postback click behavior")]
public bool AutoPostBack { get { return _postback; } set { _postback = value; } }
protected override void Render(System.Web.UI.HtmlTextWriter writer) {
if(!AutoPostBack){
this.OnClientClick = "return false";
}
base.Render(writer);
}
}
}
De nombreux attributs doivent être gérés dans un ViewState mais dans ce cas, je pense que nous sommes bons;