Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 为什么类的切换只对一些元素起部分作用,而不总是相同的?_Jquery_Jquery Ui_Jquery Ui Sortable_Toggleclass - Fatal编程技术网

Jquery 为什么类的切换只对一些元素起部分作用,而不总是相同的?

Jquery 为什么类的切换只对一些元素起部分作用,而不总是相同的?,jquery,jquery-ui,jquery-ui-sortable,toggleclass,Jquery,Jquery Ui,Jquery Ui Sortable,Toggleclass,我已经尝试使用jQuery和jQueryUI实现一个类似于中的选择列表 要将multiselect和sortable结合起来,我有一个函数,可以在单击时切换类,并允许用户使用ctrl按钮选择多个元素 排序、选择和在列表之间移动都很好,但现在我必须实现与使用按钮拖放相同的功能 现在我的问题是,如果我向上移动一个项目(使用按钮!),切换就不再有效,或者只是部分无效 有人能帮我吗 我为此创建了一个提琴,但是按钮的函数没有调用,我也不知道为什么 编辑: 处理更少的代码: 我的代码: Javascrip

我已经尝试使用jQuery和jQueryUI实现一个类似于中的选择列表

要将multiselect和sortable结合起来,我有一个函数,可以在单击时切换类,并允许用户使用ctrl按钮选择多个元素

排序、选择和在列表之间移动都很好,但现在我必须实现与使用按钮拖放相同的功能

现在我的问题是,如果我向上移动一个项目(使用按钮!),切换就不再有效,或者只是部分无效

有人能帮我吗

我为此创建了一个提琴,但是按钮的函数没有调用,我也不知道为什么

编辑:

处理更少的代码:

我的代码:

Javascript/jQuery:

  var selectedList = new Array();
  var selectedChoice = new Array();
  var selected = new Array();

  jQuery(function() {
      jQuery('#liste, #auswahl').sortable({
          connectWith:".ui-picklist-list",
      });

      jQuery('#liste, #auswahl').children().click( function (eventObject){
          if(!eventObject.ctrlKey) {
              jQuery(".ui-picklist-item").removeClass("ui-state-highlight");
          }
          jQuery(this).toggleClass("ui-state-highlight");
      });

  });

  function initMultiselect(){
      jQuery('#liste, #auswahl').children().click( function (eventObject){
          if(!eventObject.ctrlKey) {
              jQuery(".ui-picklist-item").removeClass("ui-state-highlight");
          }
          jQuery(this).toggleClass("ui-state-highlight");
      });
  }

  function hasClass(element, cls) {
      var r = new RegExp('\\b' + cls + '\\b');
      return r.test(element.className);
  }



  function moveUp(id){
      for(var i=1; i<document.getElementById(id).getElementsByTagName("li").length; i++){
          if(hasClass(document.getElementById(id).getElementsByTagName("li")[i],"ui-state-highlight")){
              var e1 = document.getElementById(id).getElementsByTagName("li")[i];
              var e2 = document.getElementById(id).getElementsByTagName("li")[i-1];

              if(e1 && e2) { //nodes found
                  var parent = e1. parentNode;
                  var clones = [
                   e1. cloneNode(true),
                   e2. cloneNode(true)
                  ];
              //toggle (replace nodes)
              parent. replaceChild(clones[1], e1);
              parent. replaceChild(clones[0], e2);
              }
          }
      }

      jQuery('#'+id).children().click( function (eventObject){
          if(!eventObject.ctrlKey) {
            jQuery(".ui-picklist-item").removeClass("ui-state-highlight");
          }
          jQuery(this).toggleClass("ui-state-highlight");
      });    
  }

好的,我发现了错误。当我克隆列表元素以在列表中上下移动或移动到另一个列表时,单击事件会丢失,因此每次移动一个或多个项目后我都会初始化它。由于某些列表项具有不止一个单击功能,所以当我单击它们时,它们有偶数个单击事件,看起来好像没有触发单击事件,因为类在同一时刻切换,然后再次切换

当我拖放这些元素时,它们没有突出显示的问题是,单击事件只是在按下鼠标按钮时触发的,而不仅仅是在按下鼠标按钮时释放

解决方案: 移动一个或多个列表项后,我调用一个函数来执行以下操作:

      jQuery([all my picklist items]).unbind('mousedown');
      jQuery([all my picklist items]).mousedown( function (eventObject){
           if(!eventObject.ctrlKey) {
              jQuery(".ui-picklist-item").removeClass("ui-state-highlight");
           }
           jQuery(this).toggleClass("ui-state-highlight");
      });

好的,我发现了错误。当我克隆列表元素以在列表中上下移动或移动到另一个列表时,单击事件会丢失,因此每次移动一个或多个项目后我都会初始化它。由于某些列表项具有不止一个单击功能,所以当我单击它们时,它们有偶数个单击事件,看起来好像没有触发单击事件,因为类在同一时刻切换,然后再次切换

当我拖放这些元素时,它们没有突出显示的问题是,单击事件只是在按下鼠标按钮时触发的,而不仅仅是在按下鼠标按钮时释放

解决方案: 移动一个或多个列表项后,我调用一个函数来执行以下操作:

      jQuery([all my picklist items]).unbind('mousedown');
      jQuery([all my picklist items]).mousedown( function (eventObject){
           if(!eventObject.ctrlKey) {
              jQuery(".ui-picklist-item").removeClass("ui-state-highlight");
           }
           jQuery(this).toggleClass("ui-state-highlight");
      });

因为当你拖动的时候你没有点击,你应该在拖动结束后触发点击,我认为这是一个叫做
stop
的选项,当我拖放东西的时候它不会被突出显示。我的问题是,当我使用按钮执行此操作时,切换不再起作用。如果JSFIDLE发生故障,您应该始终在问题中包含代码。还有,里面有大量的代码。您能用更少的代码重现错误吗?您可以尝试使用jQuery而不是
onclick
属性来添加事件处理程序。@Blaise:也许您可以告诉我怎么做。我不能让它工作。因为当你拖动的时候你没有点击,你可能应该在拖动结束后触发点击,我认为这是一个叫做
stop
的选项,当我拖放东西的时候它不会突出显示。我的问题是,当我使用按钮执行此操作时,切换不再起作用。如果JSFIDLE发生故障,您应该始终在问题中包含代码。还有,里面有大量的代码。您能用更少的代码重现错误吗?您可以尝试使用jQuery而不是
onclick
属性来添加事件处理程序。@Blaise:也许您可以告诉我怎么做。我不能让它工作。
      jQuery([all my picklist items]).unbind('mousedown');
      jQuery([all my picklist items]).mousedown( function (eventObject){
           if(!eventObject.ctrlKey) {
              jQuery(".ui-picklist-item").removeClass("ui-state-highlight");
           }
           jQuery(this).toggleClass("ui-state-highlight");
      });