gpt4 book ai didi

jquery - 使用 jQuery UI .sortable 的序列化方法获取排序元素的 html 作为值

转载 作者:行者123 更新时间:2023-12-01 01:31:59 25 4
gpt4 key购买 nike

我使用 PHP,但 Jquery 是我遇到的问题。经过长时间的搜索找不到答案。我对 Ajax、Jquery 的了解有限。这只是一个测试脚本,如果有效我可以在项目中实现它。

目标:使用自动保存更改列表的顺序 - 但仍然可以使用自动保存进行编辑。

什么有效:更改顺序(无自动保存),内联编辑适用于自动保存,但没有“可排序列表”的脚本!

问题:当左键单击列表元素(li)时,它可以拖动到新位置,但内联编辑不再起作用!

问题:如何解决上述问题? 通过 $.post 链接将提供新订单头寸的哪些数据? (我需要元素 ID 和新订单的 ID)。两者都会通过链接给予吗?每个

  • 都有一个需要的ID,而不是需要来自DIV的ID。

    可能的解决方案:制作一个 handle 来拖动元素,以便列表元素的其余部分可编辑或只是更正代码。

    每一个小步骤都是迈向宏伟解决方案的一步。谁来帮助我?

    生成的 HTML

    <html>
    <head>
    <script src="jquery-1.10.2.js"></script>
    <script>
    function showEdit(editableObj) {
    $(editableObj).css("background","#FFF");
    }

    function saveToDatabase(editableObj,column,id) {
    $(editableObj).css("background","#FFF url(loaderIcon.gif) no-repeat right");
    $.ajax({
    url: "saveedit.php",
    type: "POST",
    data:'column='+column+'&editval='+editableObj.innerHTML+'&id='+id,
    success: function(data){
    $(editableObj).css("background","#FDFDFD");
    }
    });
    }
    </script>

    <script type="text/javascript" src="inc_link_jquery-1.js"></script>
    <script type="text/javascript" src="inc_link_jquery-ui-1.js"></script>

    <script type="text/javascript">
    $(document).ready(function(){
    $(function() {
    $("#listorder ul").sortable({ opacity: 0.6, cursor: 'move', update: function() {
    var order = $(this).sortable("serialize") + '&action=orderlist';
    $.post("saveedit2.php", order);
    }
    });
    });
    });
    </script>

    </head>
    <body>
    <br><br><br>

    <div id="listorder">
    <ul class="ui-sortable">
    <li id=1><div contenteditable="true" onBlur="saveToDatabase(this,'question','1')" onClick="showEdit(this);">question 3</div>
    <div contenteditable="true" onBlur="saveToDatabase(this,'answer','1')" onClick="showEdit(this);">answer 3<br></div></li>

    <li id=2><div contenteditable="true" onBlur="saveToDatabase(this,'question','2')" onClick="showEdit(this);">question 1</div>
    <div contenteditable="true" onBlur="saveToDatabase(this,'answer','2')" onClick="showEdit(this);">answer 1<br></div></li>

    <li id=3><div contenteditable="true" onBlur="saveToDatabase(this,'question','3')" onClick="showEdit(this);">question 2</div>
    <div contenteditable="true" onBlur="saveToDatabase(this,'answer','3')" onClick="showEdit(this);">answer 2<br></div></li>

    </ul>
    </div>


    </body>
    </html>
  • 最佳答案

    问题是您的可排序列表的 id 必须以特定方式格式化,并且您无法从已排序项目的 html 中填充值。该值必须位于 id 属性中。:

    From the docs:

    serialize( options )Returns: String

    Serializes the sortable's item ids into a form/ajax submittable string. Calling this method produces a hash that can be appended to any url to easily submit a new item order back to the server.

    It works by default by looking at the id of each item in the format "setname_number" ("key_value" might have been more apt here IMHO), and it spits out a hash like "setname[]=number&setname[]=number".

    Note: If serialize returns an empty string, make sure the id attributes include an underscore. They must be in the form: "set_number"

    For example, a 3 element list with id attributes "foo_1", "foo_5", "foo_2" will serialize to "foo[]=1&foo[]=5&foo[]=2".

    You can use an underscore, equal sign or hyphen to separate the set and number. For example "foo=1", "foo-1", and "foo_1" all serialize to "foo[]=1".

    注意:

    也就是说,.sortable("serialize") 只有在您有已知的数字或少量文本时才有效。

    以下是 sortable("serialize") 工作原理的示例:

    $(".sortableList").sortable({
    scroll: true,
    axis: "y",
    containment: "parent",
    handle: $("div.sortableListTitleText").add("div.handle.move"),
    update: function() {
    var newList = $(".sortableList").sortable("serialize", {
    attribute: "itemid"
    });
    }
    });

    $("#listorder ul").sortable({
    opacity: 0.6,
    cursor: 'move',
    update: function(event, ui) {
    var incorrect = $(this).sortable("serialize");
    var correct = $(this).sortable("serialize",{attribute: "innerHTML"});
    console.log(incorrect);
    console.log(correct);

    }
    });


    function showEdit(editableObj) {
    //....
    }

    function saveToDatabase(editableObj, column, id) {
    //....
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="https://code.jquery.com/ui/1.11.3/jquery-ui.min.js"></script>
    <div id="listorder">
    <ul class="ui-sortable">
    <li id="foo_1">
    <div contenteditable="true" onBlur="saveToDatabase(this,'question','1')" onClick="showEdit(this);">question 3</div>
    <div contenteditable="true" onBlur="saveToDatabase(this,'answer','1')" onClick="showEdit(this);">answer 3
    <br>
    </div>
    </li>

    <li id="foo_d">
    <div contenteditable="true" onBlur="saveToDatabase(this,'question','2')" onClick="showEdit(this);">question 1</div>
    <div contenteditable="true" onBlur="saveToDatabase(this,'answer','2')" onClick="showEdit(this);">answer 1
    <br>
    </div>
    </li>

    <li id="foo_5">
    <div contenteditable="true" onBlur="saveToDatabase(this,'question','3')" onClick="showEdit(this);">question 2</div>
    <div contenteditable="true" onBlur="saveToDatabase(this,'answer','3')" onClick="showEdit(this);">answer 2
    <br>
    </div>
    </li>

    </ul>
    </div>

    由于您使用的是动态的 contenteditable div,并且可能包含 = - _ 和 html 等任何字符,因此我建议您不要使用 .sortable("serialize") at all 并 instea 循环遍历可排序列表中的元素,并为每个元素手动设置键和值对,然后在 ajax 中发送该字符串。

    这是我的做法:

    $("#listorder ul").sortable({
    opacity: 0.6,
    cursor: 'move',
    update: function(event, ui) {
    var params=['action=orderlist'];
    $(this).find(".ui-sortable-handle").each(function () {
    var $this=$(this);
    var key=$this.attr('id');
    var value=encodeURIComponent($this.html()); // you MUST encode this val since it may have chars thatll muck up the string
    var param = key+'='+value;
    params.push(param);
    });
    var paramsString=params.join('')
    console.log(paramsString);


    $.ajax({
    type: "POST",
    url: "page.php",
    data: paramsString,
    success: function(response) {

    },
    error: function(xhr, status, error) {
    }
    });

    }
    });


    function showEdit(editableObj) {
    //....
    }

    function saveToDatabase(editableObj, column, id) {
    //....
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="https://code.jquery.com/ui/1.11.3/jquery-ui.min.js"></script>
    <div id="listorder">
    <ul class="ui-sortable">
    <li id="foo_1">
    <div contenteditable="true" onBlur="saveToDatabase(this,'question','1')" onClick="showEdit(this);">question 3</div>
    <div contenteditable="true" onBlur="saveToDatabase(this,'answer','1')" onClick="showEdit(this);">answer 3
    <br>
    </div>
    </li>

    <li id="foo_2">
    <div contenteditable="true" onBlur="saveToDatabase(this,'question','2')" onClick="showEdit(this);">question 1</div>
    <div contenteditable="true" onBlur="saveToDatabase(this,'answer','2')" onClick="showEdit(this);">answer 1
    <br>
    </div>
    </li>

    <li id="foo_3">
    <div contenteditable="true" onBlur="saveToDatabase(this,'question','3')" onClick="showEdit(this);">question 2</div>
    <div contenteditable="true" onBlur="saveToDatabase(this,'answer','3')" onClick="showEdit(this);">answer 2
    <br>
    </div>
    </li>

    </ul>
    </div>

    关于jquery - 使用 jQuery UI .sortable 的序列化方法获取排序元素的 html 作为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39781135/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com