2012-02-03 16 views
6

Próbuję opublikować dane z jQuery w aplikacji asp.net do wyskakującego okienka.asp.net/jQuery: wysyłanie danych z jQuery do wyskakującego okienka [IE]

Jeśli pojawi się okienko popup, otrzymuję trzy błędy. Pierwszy błąd jest:

Errror: the value of the property is null or undefined not a function object 

(kod błędu [kod znajduje się na stronie popup]: http:. //www.suckmypic.net/26449/e65f2d77.png, oryg kod [code jest popup witryna]: http: //www.suckmypic.net/26450/7dfdf013.png)

następnie otrzymuję two errors prywatnych funkcji, które są zawarte poprawnie.

Następnie - jeśli jestem przeładowanie okienka wyskakującego, wszystko działa poprawnie.

otworzyć okienko w ten sposób:

$.post('popup.aspx', { X: $("#X1").val(), XX: varX, XXX: varXY, Z: varZ}, function (result) { 

    hWndHelp = window.open('', 'help', cStyle); 
    hWndHelp.focus(); 
    hWndHelp.document.open(); 
    hWndHelp.document.write(result); 
    hWndHelp.document.close(); 
}); 

(jest przechowywany w funkcji, która Dzwonię po naciśnięciu klawisza F1, która pracuje bez zarzutu)

jestem odniesienia do strony głównej i do okna wyskakującego wszystkich moich funkcji i biblioteki jquery.

Edycja

Kod dla cStyle var:

var WIN_STYLE_RESIZE = 
    'resizable = yes, ' + 
    'status = yes, ' + 
    'scrollbars = yes'; 

var cStyle = 
     WIN_STYLE_RESIZE + ', ' + 
     'width = ' + w + ', ' + 
     'height = ' + h + ', ' + 
     'top = ' + y + ', ' + 
     'left = ' + x; 

(W, H, Y, X oblicza numery, na podstawie rozmiaru okna)

Jeśli I zmień go po prostu na 'width=600,height=400', błąd nadal występuje.

Jeśli wyślę moje zmienne przez get to również działa, ale muszę ukryć zmienne w URL.

Praca metoda get:

var getUrl = "popup.aspx?X="+$('#X1').val()+"&...."; 
hWndHelp = window.open(getUrl, 'help', cStyle); 

Kolejna Edycja: prostu starał chrom i firefox - nie ma błędu. Ale potrzebuję kodu do pracy z IE.

+0

w linii czarownica dostajesz pierwszy błąd? – Aristos

+0

linia 2 (linia 1 jest pusta) –

+0

Straciłem cię, czy możesz wskazać to na kodzie? – Aristos

Odpowiedz

2

Przede wszystkim dzięki za odpowiedzi.

Próbowałem każdej odpowiedzi, ale wciąż dostaję błędy w eksploratorze internetowym.

Znalazłem obejście, ale nie cieszy mnie to, ponieważ myślę, że generowanie nowego formularza z polami wejściowymi jest zbyt duże dla moich potrzeb.

Ponieważ jest to jedyna działająca opcja umieszczania moich danych w wyskakującym okienku bez otrzymania błędu jQuery, zdecydowałem się go użyć.

var form = document.createElement("form"); 
form.setAttribute("method", "post"); 
form.setAttribute("action", "popup.aspx"); 
form.setAttribute("target", "help"); 

var input = document.createElement("input"); 
input.type = "hidden"; 
input.name = "X"; 
input.value = $("#X").val(); 
form.appendChild(input); 

var input2 = document.createElement("input"); 
input2.type = "hidden"; 
input2.name = "XX"; 
input2.value = varX; 
form.appendChild(input2); 

var input3 = document.createElement("input"); 
input3.type = "hidden"; 
input3.name = "XXX"; 
input3.value = varXY; 
form.appendChild(input3); 

var input4 = document.createElement("input"); 
input4.type = "hidden"; 
input4.name = "Z"; 
input4.value = varZ; 
form.appendChild(input4); 

document.body.appendChild(form); 

hWndHelp = window.open("about:blank", "help", cStyle); 
hWndHelp.focus(); 

form.submit(); 
document.body.removeChild(form); 

oryginalne źródło: http://taswar.zeytinsoft.com/2010/07/08/javascript-http-post-data-to-new-window-or-pop-up/

2

Daj trochę czasu na otwarcie window przed uzyskaniem do niego dostępu. Spróbuj tego.

$.post('popup.aspx', { X: $("#X1").val(), XX: varX, XXX: varXY, Z: varZ}, function (result) { 

    var hWndHelp = window.open('', 'help', cStyle); 
    setTimeout(function(){ 
    hWndHelp.focus(); 
    hWndHelp.document.open(); 
    hWndHelp.document.write(result); 
    hWndHelp.document.close(); 
    }, 400); 
}); 
+0

nie usuwa moje błędy :( –

0

Wygląda na to, że brakuje jQuery w popup.aspx. Upewnij się, że jest w zestawie.

+0

proszę przeczytać ustępujący po bardziej ostrożny –

1

Domyślam się, że biblioteka jquery ładuje się na obie strony.

A także zostały włączone $ .post w $ (function() {} .......

$ .post skrótowym funkcja $.ajax, więc działa jako asynchroniczny. Proponuję uczynić to synchronicznie, jeśli to możliwe.

+0

tak, jak byś zrobił, że Próbowałem:. funkcji myFunction() { '$ („# MyForm”) przedstawia (funkcja() { window.open ("popup.aspx", "pomoc", cStyle); $ ('# myForm') .cel = 'pomoc'; }); $ ('# myForm'). Submit (); } ' } Kiedy naciskam' F1' (nazywam to moją funkcją w ten sposób, jak to opisałem), otworzy się okno, ale w następnej sekundzie główna strona się wczytuje. –

+0

zamiast tego użyj $ .ajax $ .post http://api.jquery.com/jQuery.post/ – Rohit

1

spróbować tego:

$.ajax({ 
    type: 'POST', 
    url: 'popup.aspx', 
    data: { X: $("#X1").val(), XX: varX, XXX: varXY, Z: varZ}, 
    success: function(data, textStatus, jqXHR) { 

    var hWndHelp = window.open('about:blank', 'help', cStyle); 

    hWndHelp.focus(); 
    hWndHelp.document.open(); 
    hWndHelp.document.write(data); 
    hWndHelp.document.close(); 

    }, 
    dataType: 'html' 
}); 
1

zrobiłem plugin jQuery to zrobić. Nie musi to być jQuery, ale moje.

(function ($) { 
    $.submitFormToPopup = function (action, params, target, windowOpts) { 
     var formID = 'submitFormToPopup'; 
     var form = $('<form />') 
      .attr('method', 'post') 
      .attr('action', action) 
      .attr('target', target) 
      .attr('id', formID); 
     $.each(params, function (key, value) { 
      form.append($('<input />') 
       .attr('type', 'hidden') 
       .attr('name', key) 
       .attr('value', value)); 
     }); 
     $(document.body).append(form); 
     window.open('about:blank', target, windowOpts); 
     form.submit(); 
     $(document.body).remove('#' + formID); 
    }; 
})(jQuery); 
Powiązane problemy