【问题标题】:jQuery Ajax, moving list items between listsjQuery Ajax,在列表之间移动列表项
【发布时间】:2012-03-22 00:21:19
【问题描述】:

我不确定返回 html 是否是这里的方法,但我对 JSON 完全没有经验,也许这就是我的问题的答案。

我有两个带有项目的 ul 列表,它们都有一个选择,第一个列表包含所有选定选项等于 cero 的项目,另一个列表包含其余的:

<ul id="invlistsinmesa">
  <li id="inv-56">
      <label>Name 1</label>
        <select>
            <option  value="1">Mesa 1</option>
            <option  value="2">Mesa 2</option>
            <option  value="3">Mesa 3</option>
                    <!-- ... -->                               
            <option selected="selected" value="0">Sin mesa</option>
        </select>
       <div class="delete_box"><a href="#invlistsinmesa" class="close">Delete</a></div>                  
 </li><li id="inv-57">
      <label>Name 2</label>
        <select>
            <option  value="1">Mesa 1</option>
            <option  value="2">Mesa 2</option>
            <option  value="3">Mesa 3</option>
                    <!-- ... -->                               
            <option selected="selected" value="0">Sin mesa</option>
        </select>
       <div class="delete_box"><a href="#invlistsinmesa" class="close">Delete</a></div>                  
 </li>
</ul>
<ul id="invlist">
  <li id="inv-36">
      <label>Name 1</label>
        <select>
            <option  value="1">Mesa 1</option>
            <option  value="2">Mesa 2</option>
            <option selected="selected" value="3">Mesa 3</option>
                    <!-- ... -->                               
            <option value="0">Sin mesa</option>
        </select>
       <div class="delete_box"><a href="#invlistsinmesa" class="close">Delete</a></div>                  
 </li><li id="inv-37">
      <label>Name 2</label>
        <select>
            <option selected="selected" value="1">Mesa 1</option>
            <option value="2">Mesa 2</option>
            <option value="3">Mesa 3</option>
                    <!-- ... -->                               
            <option value="0">Sin mesa</option>
        </select>
       <div class="delete_box"><a href="#invlistsinmesa" class="close">Delete</a></div>                  
 </li>
</ul>

如您所见,其中有很多代码,而且都来自数据库。我在这里进行了一些 ajax 调用(删除、添加新项目),但我遇到的一个问题是当我更改所选选项时。这是我现在的代码(更改选择):

编辑:添加了点击功能(它没有改变,因为我使用 jqTransform 来设置选择的样式,但它与使用常规选择的更改相同)

$('li[id^="inv-"] div.jqTransformSelectWrapper ul li a').on('click', function(){
  var item=($(this).closest("li[id^='inv-']")).attr('id');
  var id = parseInt(item.replace("inv-", ""));
  var nummesa= ($(this).closest('li')).attr('class');

$.ajax({
  type: "POST",
  url: "ajax-invi.php",
  dataType: "html",
  data: "id="+id,
  success: function(data) {
    if(data>=0){
      if(data!=0){
        noty({"text":"Person has been moved"});
      }else{
        //Here I need to control if the list item needs to 
        //change to the other list or not
      }          
    }else{
      if(data=='-1'){
        noty({"text":"Table is full, person cannot move there","type":"error"});
      }
    }
  }
 }); 
});

在我的 ajax-invi.php 文件中,我查询数据库以查看该人是否可以移动到新选择的选项(基本上你把人放在表中,你不能把一个人放在一个完整的表中,这需要被控制),如果表已满则返回 -1,否则返回 0,但如果我需要移动它,那么我会遇到问题,因为我没有返回需要移动的 html。

【问题讨论】:

  • 帮助我了解所需的行为。假设您为 inv-56 选择了一个表。当您返回 0 时,您希望将 inv-56 的 html 从 invlistsinmesa 移动到 invlist。对吗?

标签: php ajax jquery


【解决方案1】:

我在这里对您想要什么做一些假设,但假设您想将 LI 从 invlistsinmesa 移动到 invlist,这里是您移动数据所需的代码。您不需要从调用中返回任何 html,因为 HTML 已经存在于您的文档中。假设您的 .ajax 调用中的 id 是 LI id,例如 inv-56 那么这里是代码:

var $item = $('#' + id);
$('#invlist').append('<li id=' + id + '>' + $item.html() + '</li>');
$item.remove();

【讨论】:

  • 这个问题不知道用户会把select的值改成0还是改成别的数字。如果选择值为 1 并且他更改为 3,则该项目不应移动(只需更改数据库)。只有当他选择 0 时它才会移动。
  • 如果该项目在顶部列表中并且您选择的选项 > 0 那么您会移动它,对吗?同样,如果该项目在底部列表中并且您选择 0 它会移回顶部列表,对吗?
  • 您能否更新您帖子中的代码以包含整个 on change 功能?
  • 我编辑了我的代码,但变化不大。我的价值观也是正确的,我在萤火虫上检查了它们。更多的是不知道如何处理它们以获得预期的结果。
  • 我在您的代码中看不到任何与 SELECT 元素中的更改事件相关的内容。我所看到的只是处理删除按钮的代码,但是您的 AJAX 调用与 SELECT 相关,而不是与 DELETE 相关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
相关资源
最近更新 更多