Новое в jQuery, простой скрипт всплывающего окна, есть проблемы? - PullRequest
0 голосов
/ 18 ноября 2009

Еще немного "нахальный" про jQuery. Этот простой скрипт всплывающего окна выглядит хорошо? Правильна ли моя логика jQuery?

У меня есть несколько вопросов в комментариях к коду, которые мне интересны.

$( document ).ready( function()
{
    $( "a[target='popup']" ).click( function( event )
    {
        var $href = $( this ).attr( 'href' ); // should I use "this.href"?
        var $name = $( this ).attr( 'target' ); // does the window name matter?
        var $config = 'width=590, height=590, top=20, left=60, scrollbars=1';
        var $popup = window.open( $href, $name, $config );

        if ( window.focus ) // is this even necessary?
                            // any other conditions I should check instead?
        {
            $popup.focus();
        }
        event.preventDefault(); // should this be above $popup.focus()?
    });
});

Кажется, это работает, но так как этот скрипт будет важен для получения подписчиков RSS на моем сайте, я подумал, что обязательно.

Ответы [ 3 ]

1 голос
/ 18 ноября 2009

// я должен использовать "this.href"? Нет, используйте селектор jquery - если вы собираетесь много использовать $ (this), поместите его в переменную в начале, чтобы у вас не было лишних затрат на создание объекта jquery каждый раз (вы делаете это дважды, поэтому вы создаете объект jquery дважды).

// имеет ли значение имя окна? Если вы хотите что-то сделать с окном позже, например закрыть его или изменить его местоположение, вам понадобится имя. Это просто ручка к окну.

// это вообще необходимо? Это просто гарантирует, что вы можете делать то, что собираетесь сделать, - это проверка функций, чтобы убедиться, что вы не генерируете ошибку, когда метод focus () недоступен.

// любые другие условия, которые я должен проверить вместо этого? Нет - проверьте функцию, которую вы будете вызывать (вы вызываете ее, когда фокусируете всплывающее окно).

// это должно быть выше $ popup.focus ()? Нет. Лучше оставить это до последнего, поскольку это - то, где другой разработчик будет искать это. Сначала сделайте все, что вы хотите, а затем вставьте это, чтобы событие не всплывало.

Наконец, что с префиксом $ в именах переменных? Возможно, вы захотите сохранить эту практику для PHP, поскольку $ теперь является дескриптором jquery.

$(document).ready( function() {
    $("a[target='popup']").click( function(event) {
        var myObject = $(this);
        var href = myObject.attr("href");
        var name = myObject.attr("target");
        var config = "width=590, height=590, top=20, left=60, scrollbars=1";
        var popup = window.open(href, name, config);

        if ( window.focus ) {
                popup.focus();
        }
        event.preventDefault();
    });
});
1 голос
/ 18 ноября 2009

Ваша функция JavaScript правильна. Вот объяснение каждого вопроса:

1) Должен ли я использовать this.href?
Нет, не стоит, потому что это не самый лучший способ сделать что-то. Реализации Javascript могут варьироваться от браузера к браузеру, и эта функция jQuery гарантирует, что вызов возвращает правильное значение в каждом браузере, который он предназначен поддерживать. Хотя this.href может работать, нет гарантии, что он будет работать, но jQuery будет работать (в браузерах, которые он должен поддерживать).

2) Имеет ли значение имя окна?
Да. Смысл использования этого сценария jQuery заключается в управлении всплывающим окном, однако ссылка должна работать (нацелена на указанное окно), даже если у пользователя отключен JavaScript. Этот javascript предназначен для того, чтобы вы могли контролировать, как выглядит окно.

3) Это необходимо?
Да, это возвращает вас к тому, что вам не гарантируется поддержка определенных функций JavaScript. Вызов window.focus просто проверяет, существует ли функция фокусировки для этого элемента в этом браузере. Если он существует, он попытается установить фокус на этот элемент, а если он не существует, он не будет отображаться как ошибка сценария (плохой пользовательский опыт) в браузере.

4) должно ли это быть выше $ popup.focus ()?
Это позволяет браузеру узнать, что вы успешно создали и открыли окно самостоятельно и что событие должно перестать работать (таким образом отменяется событие открытия по умолчанию в новом окне браузера).

0 голосов
/ 18 ноября 2009

window.focus

Делает запрос на вывод окна в передний. Может произойти сбой из-за пользователя настройки и окно не гарантированно быть передовым до этого метод возвращает.

event.preventDefault ()

Отменяет событие, если оно отменяется, без остановки дальнейшего распространения события.

Я не думаю, что будет какая-то разница, если вы дадите это выше метода фокусировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...