Измените HREF с помощью jQuery, щелкнув левой кнопкой мыши только для одного клика - PullRequest
0 голосов
/ 05 августа 2011

Я хочу открыть сайт в iframe с помощью fancybox, если пользователь решает открыть ссылку на этот сайт в новой вкладке или окне, то необходимо предоставить другой макет (полный макет).

Обычная ссылка открывает полную страницу, но если я добавлю & type = 77 до конца, моя CMS будет знать, что она должна предоставить урезанную версию, которая подходит для iframe. Следующий код добавляет «& type = 77», если ссылка нажата левой кнопкой мыши.

$('#mylink').mousedown(function(event) {
        if(event.which == 1) {
            var actualHref = $(this).attr("href");
            $(this).attr("href", actualHref + "&type=77");
        } 
    });

Это прекрасно работает, но прикрепляет деталь к каждому клику. Итак, если я щелкну левой кнопкой мыши один раз и закрою fancybox, а затем щелкну правой кнопкой мыши (откройте на новой вкладке), я все равно получу новый URL с прикрепленной частью. И это также прикрепляет эту часть для каждого клика.

Я попытался использовать window.location для измененного URL-адреса вместо того, чтобы изменить URL-адрес - это работало частично, оно подняло правильный URL-адрес, но оно сломало fancybox. Загрузка fancybox началась, но затем она была перенаправлена ​​на новую страницу.

Может быть, есть гораздо лучший подход к этому. Заранее спасибо. * * 1010

Ответы [ 3 ]

3 голосов
/ 05 августа 2011

Используйте метод .one:

$('#mylink').one("mousedown", function(event) {
        if(event.which == 1) {
            var actualHref = $(this).attr("href");
            $(this).attr("href", actualHref + "&type=77");
        } 
    });

Обновление Причудливая коробка может принимать href для открытия, когда вы назначаете плагин для объектов, поэтомусделать что-то вроде этого:

$("#mylink").each(function(){
     var $this = $(this);
     $this.fancybox({"href": $this.attr("href")+"&type=77"});
});

(Некоторым людям может быть лучше, чем / не нравится использовать each для одного элемента, но я не думаю, что это действительно важно для одного вызова)

1 голос
/ 05 августа 2011

Я надеюсь, что это решит проблему:

var myLink = $('#mylink');
        var actualHref = myLink.attr("href");

        myLink.one("mousedown", function (event) {
            if (event.which == 1) {
                $(this).attr("href", actualHref + "&type=77");
            }
        });
        myLink.one("mouseleave", function (event) {
            if (event.which == 1) {
                $(this).attr("href", actualHref);
            }
        });
0 голосов
/ 05 августа 2011

jQuery .one () метод для выполнения события только один раз.

jQuery .unbind () метод для удаления обработчика событий из элемента.

Вы также можете узнать больше о событиях мыши:

События мыши W3C

Который против кнопки

...