【问题标题】:jQuery Sortable validationjQuery 可排序验证
【发布时间】:2023-03-27 15:50:01
【问题描述】:

我是 javascript 和 jquery 的新手,但我试图弄清楚如何实现验证表单,当用户以正确的顺序放置/拖动图像时,可以提交表单。我让图像以不同的顺序拖动,并有一个警报框输出数组中的顺序,但是我将如何为用户设置一个值以对图像数组进行排序?我有最新版本的 jQuery 链接到页面和 jQuery UI。

我正在尝试在代码中实现 if else 语句。我只是不确定我哪里出错了。 这是我到目前为止所得到的..

$(window).load(function(){
  $(function() {
    //$('#submit').on('click', function() {
    //var valid = true,
    //message = '';

    $( "#sortable" ).sortable({
      placeholder: "ui-state-highlight",
      cursor: 'crosshair',
      update: function(event, ui) {
        var order = $("#sortable").sortable("toArray");
        $('#image_order').val(order.join(","));
        alert($('#image_order').val());
      }
    });
    
    $( "#sortable" ).disableSelection();

    //if('#image_order').val { != [4,3,2,1];
    //valid = false; }
    //else {
    //window.location.href = "http://google.com"
    //}
  });
});
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/smoothness/jquery-ui.css" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>
<form action="" method="post">
  <input type="hidden" id="image_order" name="image_order" value="" />

  <ul id="sortable" style="width: 524px;">
    <li id="1" class="ui-state-default"><img src="http://placehold.it/100x90/ff0000/000000.png&text=1" /></li>
    <li id="2" class="ui-state-default"><img src="http://placehold.it/100x90/ffff00/000000.png&text=2" /></li>
    <li id="3" class="ui-state-default"><img src="http://placehold.it/100x90/00ff00/000000.png&text=3" /></li>
    <li id="4" class="ui-state-default"><img src="http://placehold.it/100x90/00ffff/000000.png&text=4" /></li>  
  </ul>

  <div style="clear:both;"></div>
  <input name="Submit" value="RE-ORDER" type="submit" />
</form>

【问题讨论】:

  • 我为你添加了占位符图片。 jQuery UI 也已启用。
  • jQuery* UI 也已启用。您是否将脚本包含在本地文件中?
  • 谢谢 :) 你知道锄头我会实现这个需要数组的特定模式吗?比如用户是否必须以某种方式订购它们才能继续处理表单?

标签: javascript jquery html jquery-ui validation


【解决方案1】:
$(window).load(function(){
  $(function() {


    $( "#sortable" ).sortable({
      placeholder: "ui-state-highlight",
      cursor: 'crosshair',
      update: function(event, ui) {
        var order = $("#sortable").sortable("toArray");
        order = JSON.stringify(order);
        correct = JSON.stringify(["4","3","2","1"]);
        if (order==correct){
            //ENABLE WHATEVER HERE
        }
      }
    });

    $( "#sortable" ).disableSelection();

  });
});

【讨论】:

  • 无需使用JSON解析器,只需function isEqual(arr1,arr2){return arr1.join('').localeCompare(arr2.join(''))==0;}
  • @IsaacRay:有趣...JSON.stringify() 在 Google Chrome 中比 Array.join()~4%,但在 Mozilla Firefox 中, Array.join()JSON.stringify()~84%See: Performance test (results at bottom of page).
  • @IsaacRay 伙计们,我能再问一个可能很愚蠢的问题吗?对不起,我只是对一件事感到困惑。一旦验证的 json 数组正确传递,我想重定向用户.. 没问题,但是如果我允许用​​户在所需的文本字段中输入数据。然后我得到一个错误。这两个内容似乎都在干扰。用户只能在填写内容后提交表单。但是当我点击提交时,代码说它也需要 image_order。
  • 同时验证两者。使用复合验证。
  • @Mr.Polywhirl,这很有趣。我建议使用 stringify 方法,主要是因为它似乎比附加函数或允许直接数组比较的其他方法之一更具可读性,但我很好奇 Chrome 和 Mozilla 在性能方面的工作差异如此之大。
【解决方案2】:

您可以添加一个validate() 函数来检查您何时排序以及何时提交表单。

<input name="Submit" value="RE-ORDER" type="submit" onclick="return validate();"/>

您可以返回一个布尔值来判断表单是否有效,以阻止onClick 函数传播。

在允许用户继续之前,只需检查字段并确保顺序正确。

var expectedOrder = ["4", "3", "2", "1"];
var currentOrder = [];

window.validate = function() {
  if ($('#username').val().trim() === '') {
    return false;
  }
  if (!isEqual(currentOrder, expectedOrder)) {
    return false;
  }
  return true;
}

$(document).ready(function () {
  $('#sortable').sortable({
    placeholder: 'ui-state-highlight',
    cursor: 'crosshair',
    update: function (event, ui) {
      currentOrder = $("#sortable").sortable("toArray");
      if (validate()) {
        alert('Navigating to http://www.google.com...');
      }
      $('#sortable').disableSelection();
    }
  });
});

function isEqual(arr1, arr2) {
  return arr1.join('').localeCompare(arr2.join('')) === 0;
}
body {
  padding: 8px;
}
.req {
  color: #FF0000;
  font-weight: bold;
}
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/smoothness/jquery-ui.css" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>

<form action="" method="post">
  <label>Username:<span class="req" title="Field Required">*</span></label> 
  <input id="username" name="username" type="text" />
  <br />
  <input type="hidden" id="image_order" name="image_order" value="" />
  <ul id="sortable" style="width: 524px;">
    <li id="1" class="ui-state-default">
      <img src="http://placehold.it/100x90/ff0000/000000.png&text=1" />
    </li>
    <li id="2" class="ui-state-default">
      <img src="http://placehold.it/100x90/ffff00/000000.png&text=2" />
    </li>
    <li id="3" class="ui-state-default">
      <img src="http://placehold.it/100x90/00ff00/000000.png&text=3" />
    </li>
    <li id="4" class="ui-state-default">
      <img src="http://placehold.it/100x90/00ffff/000000.png&text=4" />
    </li>
  </ul>
  <div style="clear:both;"></div>
  <input name="Submit" value="RE-ORDER" type="submit" onclick="return validate();"/>
</form>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2019-09-30
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    相关资源
    最近更新 更多