L'evento non è sparare quando si utilizza javascript per postback
-
22-08-2019 - |
Domanda
Sto cercando di usare RadSpell di Telerik per eseguire il controllo ortografico del testo quando l'utente invia esso.
Il modo in cui questo dovrebbe funzionare è arrestando il postback, innescando il controllo ortografico tramite JavaScript, quindi in caso spellcheckfinished avviando manualmente il vero postback. Il problema è che nell'ultimo passaggio l'evento Clicked non è sparare per il pulsante e il gestore di eventi lato server non viene mai chiamato.
Ecco il codice aspx rilevanti:
<script type="text/javascript" language="javascript">
var spellCheckFinished = false;
var btnClicked;
function doSpellCheckStuff(btnTrigger)
{
btnClicked = btnTrigger;
var spell = GetRadSpell('<%= rsMessage.ClientID %>');
// spell.add_clientCheckFinished(checkFinished);
spell.startSpellCheck();
return false;
}
function checkFinished(sender, args)
{
args.SuppressCompleteMessage = true;
setTimeout('MySubmit();', 100);
}
function MySubmit()
{
WebForm_DoPostBackWithOptions(
new WebForm_PostBackOptions(btnClicked.id, '', true, '', '', false, true)
);
}
</script>
<tr>
<td>
<asp:Button ID="btnSubmit" OnClientClick="return doSpellCheckStuff(this);" Text="Submit"
OnClick="btnSubmit_Click" runat="server" />
</td>
<telerik:RadSpell ID="rsMessage" ControlToCheck="txtMessage" ButtonType="None"
UseClassicDialogs="true" FragmentIgnoreOptions="All"
OnClientCheckFinished="checkFinished" runat="server" />
</tr>
Qualsiasi idea del perché btnSubmit_Click non è sempre chiamato e come posso risolvere il problema?
Soluzione
Prova di iniettare script di postback come:
string script = @"function MySubmit(){" +
this.Page.ClientScript.GetPostBackEventReference(myButton, string.Empty);
"}";
if (!this.Page.ClientScript.IsClientScriptBlockRegistered("myPostBackScript"))
{
this.Page.ClientScript.RegisterClientScriptBlock(typeof(MyPage), "myPostBackScript", script, true);
}
Altri suggerimenti
L'ultima come di doSpellCheckStuff () sta tornando falsa sempre, che ferma il listener di eventi OnClick esecuzione.