Pracuję na stronie, która pozwoli użytkownikowi przesłać zdjęcie z wejściem HTML:

<input id="fileUpload" runat="server" type="file"   style="visibility:hidden;" />

Mam to hidden, ponieważ chcę stylować własną kontrolę przesyłania za pomocą przycisku <img> dla przycisku przeglądania i za pomocą jQuery do wywołuje zdarzenie Click Control Control:

<img id="btnBrowse" alt="Choose an photo to upload..." src="images/browse.gif" />

JS:

$("#btnBrowse").click(function () {

 $('input[type=file]').click();

});

Używam <ASP:ImageButton> dla przycisku przesyłania i <ASP:TextBox>, aby przytrzymać tekst wybranego pliku.

Jeśli wyjmę style="visibility:hidden;", wszystko działa dobrze. Ale po tym, kiedy kliknąłem przesłać plik kontroli plików, a strona nie zostanie ponownie opublikowana, dopóki nie kliknę po raz drugi.

Wiem, że jest to rodzaj "włamania", ale nie chcę używać sterowania <ASP:FileUpload>, ponieważ nie można go dostosować i nie chciałem zawracać sobie głowy z wtyczką jquery, jeśli mogę osiągnąć Potrzebuję bez jednego.

Czy ktoś doświadczył tego lub mieć jakiś pomysł, jak mogłem zrobić tę pracę podczas utrzymywania style="visibility:hidden;" na miejscu?

Z góry bardzo dziękuję!

EDYTUJ:

W rzeczywistości wydaje się być bardziej związane z moim niestandardowym przyciskiem "Przeglądaj". Używałem <img>, jak zauważono i próbowałem użyć <ASP:ImageButton>, ale uzyskaj takie same wyniki. W każdej chwili kliknięcie przycisku Moje niestandardowe Przeglądanie (który wywołuje JS, aby kliknąć input type=file), po wybraniu pliku, mój przycisk zamówienia będzie wymagał dwóch kliknięć (a pierwsze kliknięcie wyrzuca podłączenie podłączenia wejścia (jak się próbuje opublikować się?

Jakieś myśli na ten temat?

1
lhan 11 listopad 2011, 08:27

3 odpowiedzi

Najlepsza odpowiedź

Jeśli poprawnie rozumiem, możesz dołączyć zdarzenie do obrazu przeglądania w kodzie za sobą. Zrobiłem to samo, dodając wiele atrybutów do przycisków, tj. Wskazówka OnClick do Kodeksu i Onchange wskazywała na JS.

1
user1040975 11 listopad 2011, 04:36

Czysty dźgnięcie w ciemności, spróbuj użyć display:none zamiast visibility:hidden

0
Jon P 11 listopad 2011, 04:37

Ponadto, jeśli masz już plik JS, możesz użyć następujących elementów:

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
         window.onload = func;
    }
    else {
        window.onload = function () {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
}
addLoadEvent(whatYouWantToInit);

var whatYouWantToInit_count = 0;
function whatYouWantToInit() {
    if (whatYouWantToInit_count) { return; } // Won't let this function execute twice.
        whatYouWantToInit_count++;
        if ($('yourButton') != null) {
            $('yourButton').onclick = yourButton_click; //the function you want your onclick event to fire.
        }
}
0
McDowell 24 luty 2012, 16:24