[ jablan @ 06.03.2007. 09:42 ] @
Pozdrav svima,

Ne znam koliko koristite klijentske skriptove, tj. da li ste se susretali sa sledećim problemom:

Imam neki klijentski kôd koji se izvršava na onsubmit eventu forme. Ako se postback izaziva npr. klikom na neko dugme, to lepo radi. Međutim, ako se postback izaziva iz javascripta (npr. korišćenjem LinkButton kontrole, ili AutoPostBack propertija na recimo RadioButtonList-u), onsubmit handler se ne poziva (proizvođači brauzera su tu odstupili od W3C specifikacije). Kako vi rešavate ovaj problem?
[ jablan @ 06.03.2007. 10:04 ] @
Ok, posle malo guglanja našao sam drži-bure-vodu rešenje (ovde ga kombinujem sa jQuery):
Code:

// save a reference to the original __doPostBack
var __oldDoPostBack = __doPostBack;
// replace __doPostBack with another function
__doPostBack = function(eventTarget, eventArgument) {
    // zvanje onsubmit handlera:
    $('#aspnetForm').submit();
    // zovemo originalnu ASP.NET postback funkciju
    return __oldDoPostBack (eventTarget, eventArgument);
}

Ako neko ima bolje rešenje, neka javi. Hvala.
[ mmix @ 06.03.2007. 12:18 ] @
Izgleda mi kao da radis u .NET1.1, asp.net2 je resio ovaj problem. Ovako izgleda fabricki publikovani doPostback:

Code:

<script type="text/javascript">
<!--
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
// -->
</script>



Kao sto vidis prvo poziva onsubmit ako je prisutan i na osnovu return-a iz onsubmit postuje ili ne (mozes da sprecis submit forme). Kombinovano sa resenjem koje si dao moglo bi i ovako da se uradi:


Code:

<script type="text/javascript">
<!--
var __oldDoPostBack = __doPostBack;
__doPostBack = function(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
    __oldDoPostBack (eventTarget, eventArgument);
    }
}
// -->
</script>


Proveri samo dal 1.1 koristi identifikator theForm ili neki drugi....
[ jablan @ 06.03.2007. 12:40 ] @
Au contraire, koristim 2.0, fabrički JS izgleda tako kao što si napisao, ali ne radi (kad se forma submituje na način koji sam gore naveo)... :) Iskreno, pojma nemam zašto.

Btw, u rešenju koje daješ dvaput se proverava i poziva onsubmit, jednom u tvojoj bezimenoj funkciji, drugi put u staroj __dopostback funkciji.
[ mmix @ 06.03.2007. 13:16 ] @
Citat:
jablan: Au contraire, koristim 2.0, fabrički JS izgleda tako kao što si napisao, ali ne radi (kad se forma submituje na način koji sam gore naveo)... :) Iskreno, pojma nemam zašto.

Btw, u rešenju koje daješ dvaput se proverava i poziva onsubmit, jednom u tvojoj bezimenoj funkciji, drugi put u staroj __dopostback funkciji.


Pa koji je to brauzer, kod mene na IE 6 i 7 radi ok. Mogu da razumem da softverski submit() na formi ne pozove onsubmit ali da ga ne pozove kroz direktan poziv onsubmit() handlera, to je veoma cudno...

A moje resenje poziva dvaput zato sto sam mislio da koristis 1.1 i da je to uzrok tvojih problema. aspnet2 vec ima taj kod.
[ jablan @ 06.03.2007. 15:08 ] @
Hm, malo sam isprobavao i situacija je sledeća: onsubmit radi lepo kad se nakači direktno iz JS. Međutim, kad za to koristim jQuery, iz nekog razloga ne radi, i u FF i u IE... Kad nađem malo vremena pokušaću da vidim zašto se to dešava.

Hvala u svakom slučaju.
[ jablan @ 16.03.2007. 16:24 ] @
Update: Ako nekom zatreba, tema je elaborirana i par "workaround" rešenja je pronađeno na http://www.devprotalk.com/showthread.php?t=2607