Как я сгенерировал бы событие (jQuery или ванильный JavaScript), когда всплывающее окно закрывается?

Вы описываете простой алгоритм Bubble Sort в соответствии с http://en.wikipedia.org/wiki/Bubble_sort :

Bubble sort animation

[ 116] «.string» - это просто массив символов. Последний символ имеет значение 0, чтобы определить конец строки. Символ кодируется как 8-битное значение. Таким образом, вам нужно только использовать 8-битные регистры процессора (AL, AH, DL, DH и т. Д.) Для их обработки. Вы можете использовать 32-битные расширенные регистры (EAX, EBX, ECX, EDX и т. Д.), Но это излишне усложняет ситуацию.

Bubble Sort требуется две вложенные петли. В этом случае бесконечный внешний цикл, который заканчивается, когда строка сортируется, и внутренний цикл, который обрабатывает каждый символ.

Следующий пример очень прост. Например, последнее отсортированное письмо излишне сравнивается снова и снова. У этого есть большой потенциал для улучшения:

#   Name:               bubblesort.s
#   Assemble & link:    gcc -m32 -obubblesort bubblesort.s
#   Run:                ./bubblesort

.data
fmt: .string "%s\n"
str: .string "lhtgbvfmjnbcdsaawcfr"

.text
.global main
main:

    pushl $str                  # Address of str onto the stack
    pushl $fmt                  # Address of fmt onto the stack
    call printf                 # Call libc: printf(fmt,str)
    addl $(4*2), %esp           # Adjust the stack by 2 PUSHes

    O1:                         # Outer loop ends when everything is sorted (swapped == false)
    movl $str, %esi
    movb [110], %dl                # swapped = false

    I1:                         # Inner loop: every character
    movb (%esi), %al
    movb 1(%esi), %ah
    cmpb [110], %ah                # End of string?
    je O2                       # Yes -> exit inner loop

    cmpb %ah, %al               # Compare the characters
    jbe I2                      # If AL < AH, don't swap the characters
    movb $1, %dl                # swapped = true
    movb %al, 1(%esi)           # Swap: Store the characters in reversed order
    movb %ah, (%esi)

    I2:
    incl %esi                   # Next character
    jmp I1

    O2:
    pushal                      # Preserve all registers
    pushl $str                  # Address of str onto the stack
    pushl $fmt                  # Address of fmt onto the stack
    call printf                 # Call libc: printf(fmt,str)
    addl $(4*2), %esp           # Adjust the stack by 2 PUSHes
    popal                       # Restore all registers

    cmpb $1, %dl                # swapped == true?
    je O1                       # Yes -> one more outer loop

    Done:
    ret                         # Return: exit the main function

И вот еще одна «оживленная» иллюстрация:

https://www.youtube.com/watch?v= lyZQPjUT5B4

12
задан Dan Herbert 29 September 2011 в 21:18
поделиться

7 ответов

Пример кода jQuery для разгрузить события

$(window).unload( function () { alert("Bye now!"); } );

Из jQuery разгружают документацию

Править:

Я играл вокруг и не смог заставить родительское окно мочь установить разгружение. Единственным путем я мог заставить это работать, был при наличии сценария, существующего в HTML всплывающего окна. Всплывающее окно также должно было загрузить jQuery. У меня нет ничего для базирования этого на, но я полагаю, что разгружение инициировано, потому что по существу всплывающее окно разгружается от объема родительского окна. Просто предположение.

2
ответ дан 2 December 2019 в 04:54
поделиться

У Вас должен был бы быть onBeforeUnload вызов события метод для уведомления обработчика.

Посмотрите эту страницу для демонстрации.

http://www.4guysfromrolla.com/demos/OnBeforeUnloadDemo1.htm

1
ответ дан 2 December 2019 в 04:54
поделиться

Используйте window.onUnload

0
ответ дан 2 December 2019 в 04:54
поделиться

Существует одна крошечная выгода, которую я должен упомянуть относительно предыдущих упоминаний о onunload на основе моего предыдущего опыта:

Opera 9.0.x-9.2.x только выполняет window.onUnload, если пользователь перешел далеко от страницы. Если пользователь вместо этого закроет окно, то событие никогда не будет стрелять. Я подозреваю, что это было сделано для борьбы со всплывающей проблемой самоперезагрузки (где всплывающее окно могло вновь открыть себя на странице близко).

Это, скорее всего, сохранилось к Opera 9.5.x. Другие браузеры могут также реализовать это, но я не полагаю, что IE или Firefox делают.

0
ответ дан 2 December 2019 в 04:54
поделиться

Из того, что я проверил, выгрузка jQuery - это просто оболочка для собственной функции. Я мог ошибаться, поскольку не копал так глубоко.

Этот пример сработал для меня.

$(document).ready(function(){
    $(window).unload( function (){
        alert('preget');
        $.get(
            '/some.php',
            { request: 'some' }
        );
        alert('postget');
    });
});

Помните, что некоторые браузеры блокируют запросы window.open при выгрузке, например IE .

]
0
ответ дан 2 December 2019 в 04:54
поделиться

Я создал наблюдателя, который проверяет, закрыто ли окно:

var w = window.open("http://www.google.com", "_blank", 'top=442,width=480,height=460,resizable=yes', true);
var watchClose = setInterval(function() {
    if (w.closed) {
     clearTimeout(watchClose);
     //Do something here...
    }
 }, 200);
18
ответ дан 2 December 2019 в 04:54
поделиться

Я пробовал подход наблюдателя, но столкнулся с проблемой «отказано в разрешении» при использовании этого в IE6. Это происходит из-за того, что свойство closed не полностью доступно после закрытия окна ... но, к счастью, с конструкцией try {} catch это работает: o)

var w = window.open("http://www.google.com", "_blank", 'top=442,width=480,height=460,resizable=yes', true);

var watchClose = setInterval(function() {
    try {
        if (w.closed) {
            clearTimeout(watchClose);
            //Do something here...
        }
    } catch (e) {}
}, 200);

Спасибо, магнус

7
ответ дан 2 December 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: