Cómo evitar que el código detrás de la función se active con js
El problema:
Tengo un formulario con un código detrás de la función y también hago algunas validaciones js y no quiero que el código detrás de funciton funcione si el js devuelve falso. Intenté usar OnClientClick y devolver falso al final de la función pero no funcionó.
aspx:
<asp:Button ID="Button1" runat="server"
CssClass="action-button"
OnClientClick="return updateValidation();"
OnClick="Button1_Click" Text="Update" />
Código detrás:
public partial class Update : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack && Session["user"] != null)
{
UserService us = new UserService();
string id = Session["user"] as string;
string selectQuery = "SELECT * FROM users WHERE ID = '" + id + "'";
DataTable table = us.ExecuteDataTable(selectQuery);
SignUpName.Value = table.Rows[0]["fName"] as string;
SignUpLastName.Value = table.Rows[0]["lName"] as string;
email.Value = table.Rows[0]["email"] as string;
birthDate.Value = table.Rows[0]["birthDate"] as string;
city.Value = table.Rows[0]["city"] as string;
address.Value = table.Rows[0]["address"] as string;
zipCode.Value = table.Rows[0]["zipcode"] as string;
Password.Value = table.Rows[0]["userPassword"] as string;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string id = Session["user"] as string;
string fName = SignUpName.Value.ToString();
string lName = SignUpLastName.Value.ToString();
string UserbirthDate = birthDate.Value.ToString();
string Usercity = city.Value.ToString();
string UserAddress = address.Value.ToString();
string UserZipCode = zipCode.Value.ToString();
string UserEmail = email.Value.ToString();
string userPassword = Password.Value.ToString();
UserService us = new UserService();
User u = new User(fName, lName, id, UserbirthDate, Usercity, UserAddress, UserZipCode, UserEmail, userPassword);
us.UpdateUser(u);
}
}
Javascript:
function updateValidation() {
window.check = true;
checkFName();
checkLName();
checkEmail();
checkBrithDate();
checkCity();
checkAddress();
checkZipCode();
checkPassword();
return check;
}
Ya intenté devolver falso al final de js en cualquier caso, pero tampoco funcionó.
Respuestas
El código está estructurado bien y su window.checkvariable tiene un booleanvalor, pero en lugar de eso, está devolviendo una variable nombrada checkque no veo declarada o modificada en ninguna parte de su ejemplo de código. Lo que significa que la checkvariable no tiene un booleanvalor, más bien lo tiene undefinedo nullen él.
Ver:
function updateValidation() {
window.check = true;
checkFName();
checkLName();
checkEmail();
checkBrithDate();
checkCity();
checkAddress();
checkZipCode();
checkPassword();
// Instead of just returning check, return window.check
return window.check;
}
Si eso tampoco funciona, entonces es seguro que booleansiempre es lo trueque no detiene la publicación.
Además, puede usar jquerypara vincular el evento, que es mi forma preferida de vincular los eventos:
<asp:Button ID="Button1" runat="server"
CssClass="action-button"
OnClick="Button1_Click" Text="Update" />
$(document).ready(function(){ $('#<%= Button1.ClientID %>').on('click', function(){
window.check = true;
checkFName();
checkLName();
checkEmail();
checkBrithDate();
checkCity();
checkAddress();
checkZipCode();
checkPassword();
// Instead of returning check, return window.check
return window.check;
});
// Your Javascript functions go here...
});
Observe, he eliminado el OnClientClickevento del marcado del botón y he vinculado el evento directamente al elemento que es mejor que devolver el booleanvalor dos veces, uno en el método en sí y el segundo en el marcado del botón.
ACTUALIZAR
Sospecho que su window.checkobjeto no está definido. Es por eso que devuelve un valor en undefinedlugar de un valor booleano. Le recomendaría que lo reemplace window.checkcon solo una variable global checkcomo la siguiente:
$(document).ready(function(){ var check; // declare a variable named check in global scope to the click event $('#<%= Button1.ClientID %>').on('click', function(){
check = true; // set the initial value
checkFName();
checkLName();
checkEmail();
checkBrithDate();
checkCity();
checkAddress();
checkZipCode();
checkPassword();
return check; // return the variable check instead of window.check
});
// Your Javascript functions go here...
});
Debería llamar a la función Button1_Click después de la función updateValidaton. Puede hacerlo de esta manera: En el elemento de botón, reemplace el Botón1_Click con la función myFunction (o lo que sea que usted y lo que se llame). Entonces: function myFunction () {if (updateValidation ()) Button1_Click (); }
Llamará a la función Button1_Click solo si la validación devuelve verdadero.