Skip to content

Sorting a list with checked checkboxes causes intentionally unchecked boxes to revert to checked #1052

Closed

Description

@gavbaa

Example: http://jsbin.com/belacoreki/edit?html,js,output

Reproduction steps:

  1. Uncheck "ID"
  2. Drag the sort handle anywhere in the list.

What should happen: List is reordered with checkboxes maintaining their current state (ID unchecked)

What happens: List is reordered with the ID checkbox being re-checked.

Verified issue against master and 1.5.1 release. Regression from 1.4.2, verified does not have this issue (you can change the CDN link to https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.4.2/Sortable.js to verify).

Activity

  1. LeventeHudak commented on Mar 10, 2017

    @LeventeHudak

    Just stumbled upon the same issue and can also validate it was working in v1.4.2.

  2. ohepworthbell commented on Mar 16, 2017

    @ohepworthbell
    Contributor

    I have also noted the issue in v1.5.1

  3. jmt75200 commented on May 1, 2017

    @jmt75200

    Still an issue with v1.5.1
    http://jsbin.com/dukiqafeto/edit?html,js,output

    But is working with v1.4.2

  4. cbwiedel commented on May 19, 2017

    @cbwiedel

    I'm also running into the same issue.

  5. danimalia commented on Jun 6, 2017

    @danimalia

    I'm seeing this too, using sortablejs@1.6.0 and angular-sortablejs@2.0.6. It only happens if you specify a drag handle, fwiw. I just reverted to sortablejs@1.4.2 and the issue was resolved.

  6. gwenael74 commented on Jul 6, 2017

    @gwenael74

    To solve this bug,
    i put in comment the line "el.checked=true" in the function "_nulling":
    savedInputChecked.forEach(function (el) {
    //el.checked = true;
    });

  7. thetuningspoon commented on Aug 8, 2017

    @thetuningspoon

    Problem for me as well

  8. kaltar commented on Sep 25, 2017

    @kaltar

    This is a problem on anything that uses checkboxes.

  9. lbowers commented on Sep 29, 2017

    @lbowers

    I'm experiencing this too. Took me some time to realise Sortable was the cause of the problem.

    Clicking on the handle (or any control within the handle) causes any toggled checkboxes to revert to their checked state. Any quick fix, without changing the source code, until this is fixed?

  10. ml054 commented on Sep 29, 2017

    @ml054

    @lbowers for quick fix just use version 1.4.2 unless you need some of the features available in latest (buggy version). It helped in my case. Maybe it isn't best solution but works.

  11. ststaynov commented on Jan 24, 2018

    @ststaynov

    @RubaXa Can this code be removed from master since it causes this bug?

  12. ianshade commented on Feb 5, 2018

    @ianshade

    To confirm it is related to handle and filter options
    Here is a bin without handle set and checkboxes work as expected:
    http://jsbin.com/vuxilaqiwi/edit?html,js,output
    Here with filters (checkbox in a filter) and re-checking again occurs:
    http://jsbin.com/rimehumawo/1/edit?html,js,output

    Has anybody investigated if the proposed solution - removing el.checked = true; - is a valid solution and will not mess with anything or if there is any other solution that could make into PR?

  13. n1474335 commented on Mar 1, 2018

    @n1474335

    Any update on this? It's causing a lot of problems in CyberChef.

  14. n1474335 commented on Mar 1, 2018

    @n1474335

    It looks like this has been fixed here: https://github.com/RubaXa/Sortable/blob/master/Sortable.js#L1503

    However the package version has not been updated so this fix will not pull through to any projects building from npm. Could @RubaXa increment the patch version please?

    FYI, if you want a better fix that does not forget checked inputs on elements that are not currently being dragged, this might be a better solution:

    	function _saveInputCheckedState(root) {
    -		savedInputChecked.length = 0;
    -
    		var inputs = root.getElementsByTagName('input');
    		var idx = inputs.length;
    
    		while (idx--) {
    			var el = inputs[idx];
    -			el.checked && savedInputChecked.push(el);
    +			var i = savedInputChecked.indexOf(el);
    +			if (el.checked && i < 0) {
    +				// el checked and not already in array
    +				savedInputChecked.push(el);
    +			} else if (el.checked === false && i >= 0) {
    +				// el unchecked but in array
    +				savedInputChecked.splice(i, 1);
    +			}
    		}
    	}
  15. kaicataldo commented on Apr 4, 2018

    @kaicataldo

    First off, thanks to the maintainers of this project! I've confirmed the current master branch fixes this for me. Any chance this will be released any time soon?

  16. 1 remaining item

  17. ststaynov commented on Jun 11, 2018

    @ststaynov

    @RubaXa any chance this could be released anytime soon? Thanks.

  18. dominikfiala commented on Jul 13, 2018

    @dominikfiala

    Just stumbled upon this issue and felt the need to warn you guys: this is a deal breaker. Had to switch from vue-draggable that depends on this package to MooTools Sortables. Yep. That MooTools that is depracated and old like dinosaurs. But it works.

    Tip: Do not use handler option and experiment with pointer-events: none; or onmousedown(event => event.preventDefault()) to disable drag on other elements except the handle to simulate the handle behavior.

    @RubaXa Would you please consider putting someone else in charge of this repo?

  19. PierreGuyot commented on Jul 16, 2018

    @PierreGuyot

    Same problem as dominikfiala here, is there a chance for a fix to be released any soon?

  20. vankeer commented on Jul 16, 2018

    @vankeer

    @dominikfiala @PierreGuyot This issue is fixed, see comment above: #1052 (comment)

    Someone just needs to take over maintaining this library and create a new release.
    For our project, we just forked this repo and created a private release with the fix

  21. owen-m1 commented on Jan 5, 2019

    @owen-m1
    Member

    Please check the latest version

  22. tsyrya commented on Jan 21, 2019

    @tsyrya

    @owen-m1 the problem is still actual, at least for me.
    My current version is 1.8.1 (the latest).

  23. owen-m1 commented on Jan 21, 2019

    @owen-m1
    Member

    @tsyrya It works for me. Please reproduce in a JSBin.

  24. tsyrya commented on Jan 21, 2019

    @tsyrya

    @owen-m1 I am sorry, seems like that was my fault (I didn't update the package correctly) and seems like it is working now.

  25. kboirel commented on Feb 19, 2020

    @kboirel

    The problem stills occur to me in the latest version. If I specify a handle, the checkbox is not working at all when I click on the handle. What should I do?

  26. CaelanStewart commented on Mar 23, 2020

    @CaelanStewart

    Yeah I'm seeing the same issue, still.

    It also breaks TinyMCE, too.

  27. DanPatten commented on May 19, 2020

    @DanPatten

    I am modifying the checkboxes on the start event and on end the checkboxes are getting restored. Can we make this fix optional please?

  28. leftright1 commented on Oct 5, 2021

    @leftright1

    Still an issue with v1.13.0

  29. owen-m1 commented on Oct 10, 2021

    @owen-m1
    Member

    @leftright1 its working for me, could you provide an example?

  30. alexbezhan commented on Jan 16, 2023

    @alexbezhan

    The problem still persists when using .filter option

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions