jQuery UI是一组精心设计的用户界面交互,效果,小部件和构建在jQuery JavaScript库之上的主题。
Sortable toArray() 有时会创建末尾有重复项的列表
我想使用一个表单让用户对项目列表进行排名,并将排名存储在一个名为“ranking”的表单字段中。我为此使用“Sortable”和“toArray”: 我想使用一个表单让用户对项目列表进行排名,并将排名存储在名为 ranking 的表单字段中。我为此使用“Sortable”和“toArray”: <ul id="items" class="list-group list-group-numbered" style="cursor: move"> <li data-id="1" class="list-group-item list-group-item-action">Option 1</li> <li data-id="2" class="list-group-item list-group-item-action">Option 2</li> <li data-id="3" class="list-group-item list-group-item-action">Option 3</li> <li data-id="4" class="list-group-item list-group-item-action">Option 4</li> <li data-id="5" class="list-group-item list-group-item-action">Option 5</li> </ul> <script src="https://cdn.jsdelivr.net/npm/sortablejs@latest/Sortable.min.js"></script> <script> let el = document.getElementById('items'); let sortable = Sortable.create(el, { animation: 150, onChange: function (evt) { forminputs.ranking.value = sortable.toArray().join(','); } }); </script> <input type="hidden" name="ranking" id="ranking"> 在数据中,变量ranking主要存储包含要排序的项目的IDs的字符串。然而,偶尔(在我的数据中大约有 10%),它会存储一个字符串,其中一个 IDs 出现两次,即,与我的预期相比,该数组具有 length+1 。重复的 ID 总是出现在数组的末尾,即,如果出现 n+1 元素,则前 n 元素是唯一的,第 n+1 元素是以下元素之一的重复项之前的元素。 我期望每个输入都有一个恒定长度的数组。我尝试自己复制它,但失败了。这可能是与特定浏览器相关的问题吗?由于重复项始终位于末尾,我是否可以假设前 n 元素代表用户提交的实际排名? jQuery-UI Sortable 在拖动时使用占位符元素来指示放置插入位置。也许您正在读出该内容,因为您正在使用 OnChange 事件来读出(可以识别占位符元素,因为它带有类 ui-sortable-placeholder)。当用户不断拖动元素时,onChange可以被触发多次。 您可能想在 onUpdate 事件中读出最终序列,该事件每次拖放仅触发一次。请参阅:https://api.jqueryui.com/sortable/#event-update
我知道我可以通过执行以下操作来设置从 min 到当前滑块选择的值的背景颜色: #slider .ui-slider-range { 背景:#88ac0b; } 如何设置背景颜色...
我知道这个问题被问了很多次,并且这里有很多答案,但我的问题并没有通过提供的任何答案得到解决。问题是我正在为我的一个表格使用数据表...
我有一个表格,其中包含一行文本框 - 类别、制造商和型号。 当用户在模型字段中输入值时,我想显示一个自动完成框,显示与 wha 类似的匹配项...
我在另一个帖子上找到了这个答案.. 如何在Jquery UI对话框中添加多个按钮? 使用此语法,如何将类添加到特定按钮? $("#mydialog").dialog({ 按钮...
我正在尝试实现一种设置,其中拖动 div 会显示可以放置它的放置区域。问题是,当显示可拖动原点上方的放置区域时,它会将 div 推向
html: 可拖动1 html: <div class="item-list" id="list"> <div class="draggable" data-index="0" draggable="true">Draggable1</div> <div class="draggable" data-index="1" draggable="true">Draggable2</div> <div class="draggable" data-index="2" draggable="true">Draggable3</div> <div class="draggable" data-index="3" draggable="true">Draggable4</div> <div class="draggable" data-index="4" draggable="true">Draggable5</div> </div> <div class="drawing-board dropzone" id="dropzone"> js: $("#list").sortable().disableSelection(); $('.draggable').draggable({connectToSortable: "#list"}); 演示 Gif 视频 将排序表中的项目拖到外面并允许它们自由移动,然后将它们拖回排序表中以重复之前的功能 请参阅此建议:https://jsfiddle.net/Twisty/zex0L2af/ JavaScript $(function () { $("#list").sortable().disableSelection() $(".draggable").draggable({ connectToSortable: "#list", }) $("#dropzone").droppable({ drop: function (event, ui) { $(ui.draggable).appendTo("#dropzone") $(ui.draggable).position({ of: event, }) }, }) }) 当项目被拖出并放下时,它会附加到 dropzone 并且仍然可拖动。如果将其拖回列表,则使用 ConnectToSortable 首选项。
我正在使用一个名为 LaserFiche 的软件套件。 我试图强迫它执行我想要的操作,具体来说,我想将隐藏表的内容放入另一个我要做的表中
我有一个多值 jQuery 滑块,带有已定义的步长(它是由另一个滑块定义的,我们假设它是步长:15)和范围为 0-600。 我希望用户能够...
我有jquery UI代码,我试图显示今年的6个月,从本月开始到接下来的5个月,所以总共6个月,但现在,它超出了...
我必须使用JavaScript显示农历。我尝试使用 - jqueryui本地化,但它只是将日历翻译成中文 然后我发现了这个,但它同时显示了
我正在设置一个自动完成表单,其中我需要匹配每个关键字/术语。 我正在使用 ajax 回调来获取结果列表,并且尝试了许多解决方法将 json 结果转换为
Bootstrap 5 Bundle 和 Jquery Spinner 问题
我在使用带有 JQuery 微调器的 Bootstrap 5.3.3 (BS5) 捆绑包(用于带有数量微调器的输入)时遇到问题 - 一切正常,但向上和向下箭头不会显示在微调器上 - .. .
我已经使用鼠标滚轮事件实现了放大/缩小图像,该事件成功运行。但是当我使用触摸板执行此操作时(使用两根手指放大/缩小),行为会有所不同。如何
我初始化了一个 jQuery 滑块,然后根据 json 请求的内容动态设置最小最大值。大多数情况下,步数为 100,最小值和最大值会重新计算为偶数
为 jQuery UI Droppable 的相交容差构建匹配选项
我想将一个元素拖动到两个或更多可放置区域中,但这些可放置区域需要完全包含在我的可拖动对象中。 问题是,jQuery UI 现有的功能都没有......
我目前正在开发一个带有砖石网格的网站 - 理想情况下,我希望发生的是模仿循环滚动,当用户到达页面末尾时,砖石网格中的项目
我已经实现了 jQuery-ui 选项卡小部件,并且效果很好。 然而,它做了一些我不喜欢的风格事情。具体来说, .ui-corner-all 是圆角的,我不希望这样。 什么是“co...
如何使用 jQuery UI 创建对话框而不在 HTML 代码中指定 <div>?
使用 jQuery UI 创建对话框非常简单: $(函数() { $( "#dialog" ).dialog(); }); 使用 jQuery UI 创建对话框非常简单: <script> $(function() { $( "#dialog" ).dialog(); }); </script> <div id="dialog" title="Basic dialog"> <p>This is the default dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p> </div> 但是您仍然需要在 HTML 中使用 <div> 才能使其正常工作。 是否可以使用纯 jQuery(HTML 代码中没有 <div>)来创建对话框? 虽然我不确定为什么您想要打开一个没有内容的对话框,但您可以轻松地动态创建一个新对话框并针对它调用 jquery 对话框: $("<div>hello!</div>").dialog(); 基本代码 var d = $("#someId"); if (d.length < 1) d = $("<div/>").attr("id", "someId") .appendTo("body"); else d.dialog('destroy'); d.html('some message') .dialog({ some_options }) .dialog("open"); 你可以将 rap 放在扩展方法中。 更新(我的完整代码清单) (function($) { $.extend({ showPageDialog: function (title, content, buttons, options) { /// <summary>Utility to show a dialog on the page. buttons and options are optional.</summary> /// <param name="buttons" type="Object">Dialog buttons. Optional, defaults to single OK button.</param> /// <param name="options" type="Object">Additional jQuery dialog options. Optional.</param> if (!buttons) buttons = { "Ok": function () { $(this).dialog("close"); } }; var defOptions = { autoOpen: false, modal: true, //show: "blind", //hide: "explode", title: title, buttons: buttons }; if (options) defOptions = $.extend(defOptions, options); var pd = $("#pageDialog"); if (pd.length < 1) pd = $("<div/>").attr("id", "pageDialog") .appendTo("body"); else pd.dialog('destroy'); pd.html(content) .dialog(defOptions) .dialog("open"); } }//end of function show... )//end of extend Argument })(jQuery) 使用示例 $.showPageDialog(title, message, { "Yes": function () { $(this).dialog("close"); // do something for 'yes' }, "No": function () { // do something for no } } var div = document.createElement('div'); div.innerHTML = "Hello World"; $(div).dialog(); Juan Ayalas 解决方案应该适用于模式对话框。 对于非模态对话框,最好跟踪函数内的 id。 我使用以下代码,该代码并不完美,但应该可以确保 id 是唯一的。该代码几乎与 Juan Ayalas 示例相同,但使用计数器来避免重复的 id。 (此外,我删除了默认的“确定”按钮)。 (function($) { var dCounter=0; //local but "static" var $.extend({ showPageDialog: function (title, content, buttons, options) { /// <summary>Utility to show a dialog on the page. buttons and options are optional.</summary> /// <param name="buttons" type="Object">Dialog buttons. Optional, defaults to nothing (single OK button).</param> /// <param name="options" type="Object">Additional jQuery dialog options. Optional.</param> if (!buttons) buttons = {}; //{ "Ok": function () { $(this).dialog("close"); } }; var defOptions = { autoOpen: false, width: "auto", modal: false, //show: "blind", //hide: "explode", title: title, buttons: buttons }; if (options) defOptions = $.extend(defOptions, options); dCounter++; //console.log("dCounter is " + dCounter); var pdId = "#pageDialog"+dCounter; var pd = $(pdId); if (pd.length < 1) pd = $("<div/>").attr("id", pdId) .appendTo("body"); else pd.dialog('destroy'); pd.html(content) .dialog(defOptions) .dialog("open"); }//end of function showPageDialog }//end of extend options )//end of extend argument }//end of function definition
我正在尝试在应用程序中进行拖放操作。拖动部分工作正常,但放置部分不起作用。由于某种原因,掉落没有被触发/接受。 这就是拖累...