0

注: あなたが「ただの」jQuery 開発者である場合、この投稿の一部は少し複雑に見えるかもしれません (Base62 エンコーディングなど) - 実際はそうではありません。より技術的な詳細は質問に関連していますが、核心はjQueryが大文字のものを選択しないということです。ありがとう!

こんにちは皆さん!

だから私はAjaxによって生成されたリストを持っています。リストのタイトルをクリックすると、その ID が送信され、リスト アイテムがその横に表示されます。標準的なもの。

auto_increment ID を使用しているため、ユーザーにデータベース内の送信数を知られたくありません。そのため、Base62 にエンコードしてから、再度デコードしています。[これは問題とは無関係であることに注意してください]

私のリストが生成されると、このコードが出力されます。jQuery と一緒に CodeIgniter PHP を使用しています - これはデータベース結果のループにあります。$this->basecrypt->encode()は、整数 (ID) を Base62 に変換する単純な CI ライブラリです。

$('#title-<?php echo $this->basecrypt->encode($row->codeid); ?>').click(function() {
        alert("clicked");
        [...]

そして、ページのさらに下に:

<div id="title-<?php echo $this->basecrypt->encode($row->codeid);?>" class="title">

ご覧のとおり、これはすべて同じループで生成されます。出力されたソース コードを表示すると、次のようになります。

$('#title-1T').click[...]その後<div id="title-1T" [...]

つまり、jQuery には何の問題もないはずですよね? ID の Base62 化を開始するまでは、すべて正常に機能していました。大文字が含まれている場合、jQueryはIDを選択できない/選択しないと思います

私が間違っていたら許してください-私は比較的言えば、jQueryにかなり慣れていません-しかし、私のポイントをテストするために、私$this->basecrypt->encode()はBase36に変更しました。以前、使用していた0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 後、使用していた0123456789abcdefghijklmnopqrstuvwxyz

大文字がない場合、jQuery は正常に選択 (およびテスト目的でアラートを表示) できます。

それで、なにかお手伝いできますか?Base36 で数字と小文字だけを使い続けても安全ですか?そうでない場合、jQuery の問題のある選択プロセスについて何ができますか?

ありがとう!

ジャック

編集:以下に、ページのコード例をいくつか示します。

これは、ファイル ajaxlist.php で返されるスクリプトの一部です。これは Ajax から呼び出され、ページが読み込まれた数秒後に表示されます。最初のすぐ近くに追加してalert("clicked");、それが表示されるかどうかを確認しましたが、残念ながら表示されません... $(document).ready(function() {

    $('#title-<?php echo $this->basecrypt->encode($row->codeid); ?>').click(function() {
        alert("clicked");
        var form_data = {
            id: <?php echo $this->basecrypt->encode($row->codeid); ?>
        };

        $('.resultselected').removeClass('resultselected');
        $(this).parent().parent().addClass('resultselected');

        $('#col3').fadeOut('slow', function() {
            $.ajax({
                url: "<?php echo site_url('code/viewajax');?>",
                type: 'POST',
                data: form_data,
                success: function(msg) {
                    $('#col3').html(msg);
                    $('#col3').fadeIn('fast');
                }
        });
        });
    });
}); 
</script>

上記のコード (そのすぐ下) と同時に、同じファイルから返されるのは次のとおりです。

<div class="result">

    <div class="resulttext">

        <div id="title-<?php echo $this->basecrypt->encode($row->codeid);?>" class="title">
            <?php echo anchor('#',$row->codetitle); ?>
        </div>   [.......]

これで問題が解決する場合は、お知らせください。


編集 2:実際の出力がブラウザに返されます。

これは Firebug から取得したもので、ブラウザーに返されたデータ (Ajax) です。

    <script type="text/javascript">
    $(document).ready(function() {

        $('#title-1T').click(function() {
            alert("clicked");

            var form_data = {
                id: 1T      };

            $('.resultselected').removeClass('resultselected');
            $(this).parent().parent().addClass('resultselected');

            $('#col3').fadeOut('slow', function() {
                $.ajax({
                    url: "http://localhost:8888/code/viewajax",
                    type: 'POST',
                    data: form_data,
                    success: function(msg) {
                        $('#col3').html(msg);
                        $('#col3').fadeIn('fast');
                    }
            });
            });
        }); 
    }); 
    </script>

    <div class="result">

        <div class="resulttext">

<div id="title-1T" class="title">

                <a href="http://localhost:8888/#"><p>This is an example </p></a>        </div>`

            <div class="summary">
                gibberish summary text      </div>

            <div class="bottom">


                <div class="author">
                    by <a href="http://localhost:8888/user/7/author">author</a>         </div>

                <div class="tagbuttoncontainer">
                                        <div class="tagbutton listv">
                                                    <span>tag1</span>
                        </div>  
                                </div>

                <!-- Now insert the rating system -->
                <div class="ratingswrapper">

                    <p>4.0</p> 
                </div>

            </div>

        </div>

    </div>

さあ、それがうまくいかないと言うことはできません... できますか?!

4

4 に答える 4

5

問題が見つかりました... form_data 定義 ( demo )で変数を引用符で囲む必要があります。

    var form_data = {
        id: "<?php echo $this->basecrypt->encode($row->codeid); ?>"
    };

return false;デモがリンクをたどろうとしないように、も追加する必要がありました

于 2010-07-01T00:25:02.570 に答える
2

jQueryが問題だとは思いません。

生成する ID がページに固有のものであり、ID トークンの定義に準拠していることを再確認してください。

IDNAMEトークンは文字 ([A-Za-z]) で始まり、任意の数の文字、数字 ([0-9])、ハイフン ("-")、アンダースコア ("_")、コロンが続く必要があります(":")、およびピリオド (".")。

また、出力 HTML の有効性テストを行って、見ていなかった場所で HTML が壊れていないことを確認します。

于 2010-06-30T18:59:18.757 に答える
1

なぜ

<div id="title" id="1T" [...]

2つのIDが含まれていますか?

于 2010-06-30T18:59:03.687 に答える
1

これはあなたの特定の問題を解決しませんが、次のようなことはできません:

$('#container-of-the-divs div[id^=title-]').click(function(e) {
    alert('Clicked div with ID: ' + e.target.id);
});

これらの要素にクラスを追加して、代わりにそれを選択することもできます。大量のアイテムでパフォーマンスを求めている場合は、クリック イベントを親アイテムに追加し、内部で if ステートメントを実行して、N 個のイベント リスナーの代わりに 1 つのイベント リスナーのみを作成することもできます。例:

$('#container-of-the-divs').click(function(e) {
    if (e.target.id.substring(0, 6) == 'title-') {
        alert('Clicked div with ID: ' + e.target.id);
    }
});

または、前述のように $(e.target).hasClass() かどうかを確認することもできます。

更新:これは、あなたが与えたコードに基づく実際の例です:

<div class="result">
    <div class="resulttext">
        <div id="title-A0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" class="title">
            <a href="#">A0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</a>
        </div>
        <div id="title-B0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" class="title">
            <a href="#">B0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</a>
        </div>
        <div id="title-C0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" class="title">
            <a href="#">C0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</a>
        </div>
        <div id="title-D0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" class="title">
            <a href="#">D0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</a>
        </div>
    </div>
</div>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
$('div.resulttext div.title').click(function() {
    $i = $(this);
    alert('Clicked div with ID: ' + $i.attr('id'));
});
</script>
于 2010-06-30T19:04:29.710 に答える