简体   繁体   English

如何验证拖放html 5表单?

[英]How to validate a drag and drop html 5 form?

I'm trying to build a form which is based on drag and drop(html5). 我正在尝试构建一个基于拖放(html5)的表单。

The form is working properly but I have a issue with the validation, I need to make sure all the form input fields are not empty and to only allow input from the drag and drop option (and not from keyboard). 表单工作正常,但我有验证问题,我需要确保所有表单输入字段不为空,并且只允许从拖放选项(而不是键盘)输入。

I tried to do that using the required and readonly options but apparently they can't work together. 我尝试使用必需和只读的选项,但显然他们不能一起工作。

so this is what I got so far, link to fiddle 所以这就是我到目前为止所得到的, 与小提琴有关

CSS: CSS:

.div_swap {
width:150px;
height:30px;
padding:10px;
border:1px solid #aaaaaa;
}

.sch {

}

HTML: HTML:

<div id="s_id" >fixed</div>
<div id="GrantRoles" ></div>
<form id="formAssignRoles" onsubmit="myFunction()"> 
    <div id="second">
        <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
            <input id="drag1" class="div_swap" draggable="true" ondragstart="drag(event)" required>
            </input>
        </div>
        <br>
        <div id="div2"  ondrop="drop(event)" ondragover="allowDrop(event)">
            <input id="drag2" class="div_swap" draggable="true" ondragstart="drag(event)" required>
            </input>
        </div>
        <br>
        <div id="div3" ondrop="drop(event)" ondragover="allowDrop(event)">
            <input id="drag3" class="div_swap" draggable="true" ondragstart="drag(event)" required>
            </input>
        </div>
    </div>
    <br><br>
    <input type="submit" onclick="submitNewRoles2()" value="Submit">            
</form>

<h3> drag from here </3>        
        <div id="div4" ondrop="drop(event)" ondragover="allowDrop(event)">
            <div id="drag4" class="div_swap" draggable="true" ondragstart="drag(event)">
                <span id="sch_4" class="sch" >drag me 4</span> |
                <span id="val_4">1</span>
            </div>
        </div>
        <div id="div5" ondrop="drop(event)" ondragover="allowDrop(event)">
            <div id="drag5" class="div_swap" draggable="true" ondragstart="drag(event)">
                <span id="sch_5" class="sch" >drag me 5</span> |
                <span id="val_5">1</span>
            </div>
        </div>
        <div id="div6" ondrop="drop(event)" ondragover="allowDrop(event)">
            <div id="drag6" class="div_swap" draggable="true" ondragstart="drag(event)">
                <span id="sch_6" class="sch" >drag me 6</span> |
                <span id="val_6">1</span>
            </div>
        </div>

JAVASCRIPT: JAVASCRIPT:

function allowDrop(ev) {
    ev.preventDefault();
}

function drag(ev) {
    ev.dataTransfer.setData("src", ev.target.id);
}

function drop(ev) {
    ev.preventDefault();
    var src = document.getElementById(ev.dataTransfer.getData("src"));
    var srcParent = src.parentNode;
    var tgt = ev.currentTarget.firstElementChild;

    ev.currentTarget.replaceChild(src, tgt);
    srcParent.appendChild(tgt);
}

function submitNewRoles() {
    var x = document.getElementsByClassName("sch");
    var str ="";
    for (var i = 0; i < x.length; i++) {
        str += x[i].innerHTML;
        if (i< x.length -1) str +=", ";
    }
    var y = document.getElementById("GrantRoles");
    y.innerHTML = str;
}

function submitNewRoles2() {
    var x = $( "#second" ).find(".sch");
    var str ="";
    for (var i = 0; i < x.length; i++) {
        str += x[i].innerHTML;
        if (i< x.length -1) str +=", ";
    }
    var y = document.getElementById("GrantRoles");
    y.innerHTML = str;
}


function myFunction() {
    var y = document.getElementById("GrantRoles");
}

I would really appreciate your help! 我将衷心感谢您的帮助! thanks! 谢谢!

You could force input to lose focus when focused: (this is just a workaround, there are many other ways, i guess) 在聚焦时你可以强制输入失去焦点:(这只是一种解决方法,还有许多其他方法,我猜)

$('#formAssignRoles :input').on('focus', function(e){
    $(this).blur();
});

-DEMO- -DEMO-

Try this... 试试这个...

$('#formAssignRoles :input').keypress(function(e){
    alert("Please use drag and drop only"); 
    return false;
});

Somewhat modified @A. 有点修改@A。 Wolff's code. 沃尔夫的代码。 It's more generic. 它更通用。 Here is the 这里是

updated fiddle 更新小提琴

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM