【问题标题】:Pass value of list view to ajax将列表视图的值传递给ajax
【发布时间】:2015-09-03 06:25:49
【问题描述】:

我有一个动态创建的列表。创建列表的部分代码是:

<ul>
    <?
        foreach ($folders as $folder)
            {
                $folder = str_replace("{imap.gmail.com:993/imap/ssl}", "", $folder);
                $folder2 = str_replace("[Gmail]/", "", $folder);
            ?>
                <li>
                    <a><div id="box"><? echo $folder2; ?> </div></a>
                </li>
            <?}
</ul>

<div id="maillist"></div>

$文件夹的o/p

GMAIL/All Mail
GMAIL/Drafts
GMAIL/Important

$folder2 的o/p

All Mail
Drafts
Important

我想要的是,当用户单击所有邮件时,与其对应的值(在本例中为:GMAIL/所有邮件)应该通过 ajax 传递给另一个脚本。列表中的其他值也应遵循相同的过程

ajax 代码

<script>
$(document).ready(function(){
    $('#box').change(function(){

        var boxid = $('#box').val();
        console.log($('#box'))
        if(boxid != 0)
        {

            $.ajax({
                type:'post',
                url:'a_fetchmaillist.php',
                data:{id:boxid},
                cache:false,
                success: function(returndata){
                    $('#maillist').html(returndata);
                    console.log(returndata)
                }
            });
        }
    })
})
</script>   

谁能告诉我是否可以做我想做的事,如果可以,那么如何做

【问题讨论】:

    标签: javascript php jquery ajax list


    【解决方案1】:

    首先不要多次分配同一个id,而是设置一个类(例如box)。

    然后为特定文件夹分配一个数据属性(例如box-allMails)并在更改时选择该属性:

    foreach ($folders as $folder)
    {
       $folder = str_replace("{imap.gmail.com:993/imap/ssl}", "", $folder);
       $folder2 = str_replace("[Gmail]/", "", $folder);
    ?>
       <li>
         <div class="box" data-folder="<? echo $folder2 ?>"><? echo $folder2; ?></div>
       </li>
    <?}
    

    然后改变:

    $(document).on('click', '.box', function() {
       var folder = $(this).attr('data-folder');
       // ajax call..
    });
    

    更新

    重要提示:您必须听“点击”事件而不是“更改”,因为您点击的是 div,而不是输入(我已经更改了代码)。

    事件委托:注意代码:

    $(document).on('click', '.dynamic-element', function() { .. })
    

    代替:

    $('.element').on('click', function() { .. });
    

    第二个不起作用,因为您正在动态创建元素。

    可点击:您不必插入锚标记来使列表项可点击,除非您想重定向到另一个页面。在您的情况下,您可以设置 .box div 的样式,以获得这样的光标指针:

    CSS

    .box { cursor:pointer }
    

    jQuery 会处理剩下的事情(查看示例)

    $(document).on('click', '.box', function() {
      var folder = $(this).attr('data-folder');
      alert('You clicked on: ' + folder);
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <ul>
      <li><div class="box" data-folder="folderOne">Folder One</div></li>
      <li><div class="box" data-folder="folderTwo">Folder Two</div></li>
      <li><div class="box" data-folder="folderThree">Folder Three</div></li>
      <li><div class="box" data-folder="folderFour">Folder Four</div></li>
    </ul>

    【讨论】:

    • 第一点是我引入了一个锚标签,以使列表项可点击(不确定它的效果如何,如果你能看一下将不胜感激),第二点,我尝试了你的代码并做了一个 console.log 来检查 var 文件夹的值,但里面什么都没有,我错过了什么吗?
    猜你喜欢
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多