0

ページの表示中にユーザーがクリックしたクラス/ID/テキストを記録しています。とにかく、以下のコードは機能します (Cookie 値を除いて)...

// JavaScript Document
$(document).ready(function() {

    $("div,input,a,select,option,button,img,td",this).click(function(){

        var clickedText = $(this).text().substring(0, 30);

        // Get Element Values
        var elementClass = $(this).attr('class');                       
        var elementID = $(this).attr('id');

        // If element has no class then set var to ""
        if (typeof elementClass !== 'undefined' && elementClass !== false) {
            var elementClass = " " + elementClass;
        } else {
            var elementClass = "";
        }

        // If element has no class then set var to ""
        if (typeof elementID !== 'undefined' && elementID !== false) {
            var elementID = " / " + elementID + " |";
        } else {
            var elementID = "";
        }

        // Create string
        var clickedCookie = elementClass + elementID;

        // Print output on delevopment
        $("#show-cookies").append(clickedCookie + clickedText);

        // Set Cookie
        $.cookie('lastClicked', clickedText);

    });
});

私は jQuery cookie プラグインを持っており、現在、他のさまざまな jQuery スクリプトで使用しています。以上でCookieが作成されますが、その値は「0A%09%20%0A%20%20%20%20%20%0A%20%20%20%20%20%0A%20%20%20%20%20%0A%09」のようなものです。私のコードに奇妙な Cookie 値を作成するものはありますか?

$("#show-cookies").append(clickedCookie + clickedText);right?の出力のように表示されるはずです。

la3down | / lc-btn | / live-chat-contain | / live-chat | / contentWide | / frame-wrapそれは私が望むように出力されます。

基本的に、上記のように読み取るには、Cookie の値を取得する必要があります。jQuery Cookie Plugin の経験がある人はいますか? https://github.com/carhartl/jquery-cookie/何か間違ったことをしていますか?

最終的には、要素がクリックされるたびに Cookie の値を更新する必要があります。まだ _gaq.push コマンドを調査中です...そのポインタもおまけです笑...

4

3 に答える 3

2

上記の問題の完全なビンを作成しました。ここにもデモリンクがあります...

デモ: http://codebins.com/bin/4ldqp7i

HTML

 <span>
  <div id="show-cookie" class="cookie">
  </div>
</span>
<span>
  <button id="btnread" class="btnclass">
    Read Cookie
  </button>
  <button id="btnreset" class="btnclass">
    Reset Cookie
  </button>
</span>
<span>
  <div class="divblock">
    Div-Text
  </div>
</span>
<span>
  <input type="text" class="input" size="15" value="InputValue" id="txtinput"/>
</span>
<span>
  <a href="#" id="aLink" class="linkclass">
    My Text Link 
  </a>
</span>
<span>
  <select id="select_tag" class="selclass">
    <option>
      Option-1
    </option>
    <option>
      Option-2
    </option>
    <option>
      Option-3
    </option>
    <option>
      Option-4
    </option>
  </select>
</span>
<span>
  <img src="http://profile.ak.fbcdn.net/hprofile-ak-prn1/50305_151863314933391_163751676_q.jpg" id="img1" class="imgclass" />
</span>
<span>
  <table class="table" cellspacing="1" cellpadding="1">
    <tr>
      <td class="cell1" id="td1">
        Cell-1
      </td>
      <td class="cell2" id="td2">
        Cell-2
      </td>
      <td class="cell3" id="td3">
        Cell-3
      </td>
    </tr>
  </table>
</span>

<span>
  <input type="button" id="btn1" class="btnclass" value="Submit" />
</span>

jQuery

    $(function() {

    $("div,input,a,select,option,button,img,td").not(':button[id=btnread],:button[id=btnreset]').click(function() {
        var clickedText = "";
        if (typeof $(this).attr('value') != 'undefined') {
            clickedText = $(this).attr('value').trim().substring(0, 30);
        } else {

            clickedText = $(this).text().substring(0, 30);

        }

        var elementClass = " ";
        var elementID = "";
        if (typeof $(this).attr('class') != 'undefined') {
            if ($(this).attr('class').trim() != "") elementClass += $(this).attr('class').trim();
        }

        if (typeof $(this).attr('id') != 'undefined') {
            if ($(this).attr('id').trim() != "") elementID += " / " + $(this).attr('id').trim() + " |";
        } else {
            elementClass += " |";
        }
        // Create string
        var clickedCookie = elementClass.toString() + elementID.toString();

        // Print output on delevopment
        $("#show-cookie").append(clickedCookie + clickedText);
        //Check Existing Cookie 
        var ckVal = ($.cookie('lastClicked'));
        if (ckVal != 'undefined' || ckVal != null) {
            ckVal += " " + clickedText;
        } else {
            ckVal = clickedText;
        }

        // Set Cookie
        $.cookie('lastClicked', ckVal, {
            expires: 2,
            path: "/"
        });
        $("#show-cookie").show(500);
    });

    $("#btnread").click(function() {
        var ck = ($.cookie('lastClicked'));
        alert(ck);
    });
    $("#btnreset").click(function() {
        $.cookie('lastClicked', "");
        $("#show-cookie").html("").hide(400);
    });
});

CSS:

span {
  display:block;
  margin-top:5px;
}
.divblock {
  background:#94dca8;
  color:#333;
  width:300px;
  text-align:center;
}
.input {
  border:1px solid #335599;
  color:#335599;
}
.selclass {
  border:1px solid #1122a9;
  color:#1122a9;
  background:#94dca8;
}
.imgclass {
  border:1px solid #1122a9;
}
.table {
  width:50%;
  border:1px solid #2255dc;
}
td {
  text-align:center;
}
.cell1 {
  background:#caa8a9;
}
.cell2 {
  background:#a8b8ed;
}
.cell3 {
  background:#a8bfac;
}
.btnclass {
  border:1px solid #333;
  background:#ada5a4;
}
.btnclass:hover{
  background:#cdcaca;
}
.cookie{
  background:#fda5b7;
  border:1px solid #fa6289;
  display:none;
}

デモ: http://codebins.com/bin/4ldqp7i

于 2012-09-10T07:29:42.103 に答える
0

Cookie はURL エンコードされたhttpリクエスト内を行き来するため、Cookie の raw 値は元の値とは異なる可能性があります。以下に例を示します。

元の値:

2012 年 9 月 9 日日曜日

エンコードされた値:

日曜日%2C+09+September+2012

jQuery cookie プラグインを使用する場合は、エンコード/デコードが処理されるため、これについて心配する必要はありません。ただし、サーバー側で Cookie の値を読み取ろうとしている場合は、デコードする必要がある場合があります。詳細については、この SO の質問をご覧ください。

于 2012-09-10T01:30:41.133 に答える
0

どこに向かっているかはわかりますが、$("div,input,a,select,option,button,img,td",this).click(function(){ネストされた要素を含め、選択したすべての要素にクリックをバインドします。そのため、ユーザーがクリックするたびに複数の値を取得している可能性が高く、それが必要かどうかはわかりません。

あなたの質問に関しては、Cookie は URL エンコードされており、. 経由でデコードされたテキストを取得できますdecodeURIComponent(clickedText)。次回、迷った場合はconsole.log、問題をトレースするために使用します。

于 2012-09-10T01:33:58.180 に答える