jQuery在不同情况下选择东西时遇到问题

Jac*_*ack 0 encryption jquery codeigniter jquery-selectors base62

注意:如果你只是一个jQuery开发人员,这篇文章中的一些内容可能看起来有点复杂(Base62编码等) - 实际上并非如此.虽然更多技术细节与问题相关,但核心是jQuery不会选择带有大写字母的东西.谢谢!

嗨伙计!

所以我有一个由Ajax生成的列表.单击列表标题时,将发送其ID,并且列表项将显示在其旁边.标准的东西.

由于我们使用的是auto_increment ID,因此我们不希望用户知道数据库中有多少提交内容.所以,我将它编码到Base62,然后再解码.[请注意,这是 - 或者应该与问题无关].

因此,在生成我的列表时,输出此代码.我们在jQuery旁边使用CodeIgniter PHP - 这是在数据库结果的循环中.$this->basecrypt->encode()是一个简单的CI库,用于将整数(ID)转换为Base62:

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

然后,在页面的下方:

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

如您所见,这是在同一个循环中生成的 - 并查看输出的源代码显示,例如:

$('#title-1T').click[...] 然后 <div id="title-1T" [...]

所以,jQuery不应该有任何麻烦,对吧?在我们开始使用Base62-ID之前,一切正常.我相信jQuery在包含大写字母时不能/不会选择我们的ID.

现在请原谅我,如果我错了 - 相对来说,我对jQuery很新 - 但为了测试我的观点,我把我$this->basecrypt->encode()改成了Base36.之前,它正在使用0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ After,它正在使用0123456789abcdefghijklmnopqrstuvwxyz

没有大写字母,jQuery可以选择(并出于测试目的显示警报).

那我该怎么办?在Base36中继续使用数字和小写字母是否安全 - 如果是这样,那么最大整数大小是多少?如果没有,我可以做些什么来解决jQuery有问题的选择过程?

谢谢!

插口

编辑:下面是页面中的一些示例代码.

这是文件ajaxlist.php中返回的脚本的一部分 - 它是从Ajax调用的,并在页面加载后几秒钟出现.我在alert("clicked");开头附近添加,看看是否会出现 - 遗憾的是,它不会...... $(文档).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>
Run Code Online (Sandbox Code Playgroud)

同样从同一个文件返回,同时上面的代码(正好在它下面)是这样的:

<div class="result">

    <div class="resulttext">

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

如果这有帮助了,请告诉我!


编辑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>
Run Code Online (Sandbox Code Playgroud)

来吧 - 你不能说不应该工作......你能吗?!

Mot*_*tie 5

好的我发现了你的问题......你需要在form_data定义(demo)中的变量周围加上引号:

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

我还必须添加一个,return false;所以演示不会尝试按照链接