【问题标题】:recognise that link has been clicked before and change action识别之前已单击该链接并更改操作
【发布时间】:2011-09-07 01:24:25
【问题描述】:

我有一个链接,单击该链接时使用 .replaceWith 为.swf 文件填充 html 代码的 div。下面是一个例子:

$().ready(function() {
$('a.roots').click(function() {
    $('#flashcontent').replaceWith( "<div id=\"flashcontent\">" +
              "<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\"463\" height=\"490\" id=\"FlashID1\" title=\"Liberty Creative Solutions roots\">" +
                "<param name=\"movie\" value=\"flash/roots.swf\" />" +
                "<param name=\"quality\" value=\"high\" />" +
                "<param name=\"wmode\" value=\"opaque\" />" +
                "<param name=\"BGCOLOR\" value=\"#394A59\" />" +
                "<param name=\"swfversion\" value=\"6.0.65.0\" />" +                   
                "<param name=\"expressinstall\" value=\"scripts/expressInstall.swf\" />" +                    
                "<object type=\"application/x-shockwave-flash\" data=\"flash/roots.swf\" width=\"463\" height=\"490\">" +
                 "<param name=\"quality\" value=\"high\" />" +
                  "<param name=\"wmode\" value=\"opaque\" />" +
                  "<param name=\"BGCOLOR\" value=\"#394A59\" />" +
                  "<param name=\"swfversion\" value=\"6.0.65.0\" />" +
                  "<param name=\"expressinstall\" value=\"scripts/expressInstall.swf\" />" +
                 "<div>" +
                    "<h4>Content on this page requires a newer version of Adobe Flash Player.</h4>" +
                    "<p>" + "<a href=\"http://www.adobe.com/go/getflashplayer\">" +"<img src=\"http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif\" alt=\"Get Adobe Flash player\" width=\"112\" height=\"33\" />" + "</a>" + "</p>" +
                  "</div>" +
                 "</object>" +
                "</object>" +
          "</div>" );
});  });

我希望在第一次单击链接时插入 swf html。如果再次单击它,我希望将 div html 更改为其他内容。例如:

$('a.roots).click(function() {
    $('#flashcontent').replaceWith( "<div id=\"flashcontent\">" +
              "<a href=\"#\" onmouseout=\"MM_swapImgRestore()\" onmouseover=\"MM_swapImage('Liberty Creative Solutions - Roots','','images/nf_roots_over.jpg',1)\">" + "<img src=\"images/nf_roots.jpg\" name=\"Liberty Creative Solutions - Roots\" width=\"463\" height=\"488\" border=\"0\" id=\"Liberty Creative Solutions - Roots\" />" +"</a>" +
          "</div>" );
    }); });

如何创建一个侦听器来确定链接是否已被点击一次,然后删除 .swf html 代码并用新代码替换它?

我还想也许可以使用 cookie 来检查:

    $('a.roots').click(function() {
    if($.cookie('rootsclicked') != null) {

        $('#flashcontent').replaceWith( "<a href=\"#\" onmouseout=\"MM_swapImgRestore()\" onmouseover=\"MM_swapImage('Liberty Creative Solutions - Roots','','images/nf_roots_over.jpg',1)\">" + "<img src=\"images/nf_roots.jpg\" name=\"Liberty Creative Solutions - Roots\" width=\"463\" height=\"488\" border=\"0\" id=\"Liberty Creative Solutions - Roots\" />" + "</a>" ); 
        }

    else {
        $('#flashcontent').replaceWith( "<div id=\"flashcontent\">" +
              "<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\"463\" height=\"490\" id=\"FlashID1\" title=\"Liberty Creative Solutions roots\">" +
                "<param name=\"movie\" value=\"flash/roots.swf\" />" +
                "<param name=\"quality\" value=\"high\" />" +
                "<param name=\"wmode\" value=\"opaque\" />" +
                "<param name=\"BGCOLOR\" value=\"#394A59\" />" +
                "<param name=\"swfversion\" value=\"6.0.65.0\" />" +                   
                "<param name=\"expressinstall\" value=\"scripts/expressInstall.swf\" />" +                    
                "<object type=\"application/x-shockwave-flash\" data=\"flash/roots.swf\" width=\"463\" height=\"490\">" +
                 "<param name=\"quality\" value=\"high\" />" +
                  "<param name=\"wmode\" value=\"opaque\" />" +
                  "<param name=\"BGCOLOR\" value=\"#394A59\" />" +
                  "<param name=\"swfversion\" value=\"6.0.65.0\" />" +
                  "<param name=\"expressinstall\" value=\"scripts/expressInstall.swf\" />" +
                 "<div>" +
                    "<h4>Content on this page requires a newer version of Adobe Flash Player.</h4>" +
                    "<p>" + "<a href=\"http://www.adobe.com/go/getflashplayer\">" +"<img src=\"http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif\" alt=\"Get Adobe Flash player\" width=\"112\" height=\"33\" />" + "</a>" + "</p>" +
                  "</div>" +
                 "</object>" +
                "</object>" +
          "</div>" );
        //and set a cookie named "rootsclicked"
        setcookie();

    function setCookie(){
        document.cookie = 'cookieName=rootsclicked'; expires="1/01/2015 00:00:00";
    };
    };
    });

这样的东西会起作用还是我让它太复杂了?

【问题讨论】:

  • 您可以在一些隐藏字段中维护一个计数器,以检查点击次数。

标签: javascript jquery


【解决方案1】:

您可以使用数据方法存储一个值来查看该元素是否已被点击:

$(function() { 
    $('a.roots').click(function() {     
        var alreadyDone = ($(this).data("clicked") == "1");
        if(alreadyDone){
            $('#flashcontent').replaceWith("<WITH-OTHER-CONTENT>");
        } else {
            $(this).data("clicked", "1") ;
            $('#flashcontent').replaceWith("<WITH-SOME-CONTENT>");
        }
});     

【讨论】:

  • 您不需要将点击事件包装在 DOM 就绪函数中 - 如果它不存在,他们将无法点击它;)
  • @AlienWebguy:如果包含点击处理程序绑定的脚本标签出现在元素可用于 DOM 之前怎么办?无论哪种情况,我都将其作为一种练习..
  • 如果要保存页面刷新后的状态可以使用cookie plugin。添加 onReady 检查数据值 var clicked = $.cookie('clicked'); $('a.roots').data("clicked", clicked) 并存储 cookie ... $(this).data("clicked", "1") ; $.cookie('clicked', 1); ... }
  • @atma 我想知道使用 cookie。我有许多链接需要编码以检查是否单击了链接,我在想如果通过函数分配 cookie 可能是个好主意,因为每个链接都会有一个 cookie寻找。
【解决方案2】:

使用数据对象:

$('a.roots').click(function() 
{
    if($(this).data('clicked') === true)
    {
        // do something else
    }
    else
    {
        $(this).data('clicked',true);
        // do normal thing
    }
});

【讨论】:

  • 这是否适用于文件中的多个链接。例如,如果在页面上我有一个带有“.roots”类的链接和另一个带有“.belongs”类的链接,那么为它们中的每一个创建上述函数都会起作用,因为它使用的是“this”?或者是否需要对某些东西进行编码以使每一个都独一无二?
  • 是的,$(this) 将引用实际的节点,而不是类。
猜你喜欢
  • 1970-01-01
  • 2011-08-24
  • 2015-08-26
  • 1970-01-01
  • 2011-06-05
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
相关资源
最近更新 更多