2013-12-21 136 views
0

我正在构建一个使用一个标签表单的提交按钮的科尔多瓦应用程序,问题是这是一个移动应用程序,所以当点击我的文本输入时,写点东西而不是点击确认我的手机键盘按钮,我的问题发生。因为当我点击这个按钮时,我想移动到下一个输入,但我的应用程序执行我的提交方法。我必须对我的应用程序进行下一个输入,如果只有这是我的上一个输入,那么请验证是否所有输入都已填充。表单html,键入提交

这是我的html代码:

<form id="form"> 
    <label for="idNome"> Nome: </label> <input name="nome" id="idNome" 
     placeholder="Seu Nome" required autofocus autocomplete="on"><br> 

    <label for="idCpf"> CPF:</label> <input type="tel" 
      autocomplete="on" name="cpf" id="idCpf" placeholder="Seu CPF" 
      required> <img style="display: none;" id="idValidadeCPF" 
      src=""><br> 

    <label for="idEndereco"> Endereço:</label> 
    <textarea id="idEndereco" rows="1" cols="30"></textarea><br> 

    <label for="idMensagem"> Mensagem: </label><br> 
    <textarea cols=30 id="idMensagem" rows="10" name="mensagem" 
      maxlength="500" wrap="hard" 
      placeholder="Informe datalhes sobre o seu problema." required></textarea><br> 

    <input type="submit" value="Enviar" onclick="submitForm()" /> 

这是我submitForm方法

function submitForm(){ 
    document.getElementById('form').onsubmit= function(e){ 
     e.preventDefault(); 
     alert("Todos os campos devem ser preenchidos"); 
    } 
} 

回答

0

submitForm()功能实际上并不它所包含的逻辑,它只是设置一个处理程序。它基本上是这样做的:

document.getElementById('form').onsubmit = someFunction; 

而就是这样。无论在someFunction里面什么都不会被执行,直到下一次处理程序被调用。但它听起来像你想马上被调用。

当您提交表单时,不要指定提交处理程序,而应在页面加载时立即将其分配。事情是这样的:

<form id="form"> 
    ... your form 
    <input type="submit" value="Enviar" /> 
</form> 
<script type="text/javascript"> 
    document.getElementById('form').onsubmit = function(e){ 
     e.preventDefault(); 
     alert("Todos os campos devem ser preenchidos"); 
    } 
</script> 

请注意,我已经删除了submitForm功能完全,以及从中调用它的input删除它。这种情况并不是真的需要。 input的类型为submit,因此它会默认提交表单。但是,当页面加载时,JavaScript会将您的匿名函数添加为窗体的submit事件的处理函数,因此当input提交form时,此函数将运行。

值得注意的是,这将阻止表单实际上被提交,但。您只提交处理程序会阻止默认操作(提交表单)并显示alert()。我不清楚你为什么要这样做,或者你想要完成什么。

+0

感谢您的帮助大卫,我明白你说的是什么,问题在于搜索onde网页,我不明白使用“preventDefault()”。我想要的是一种方法,用于验证是否所有输入都已填充,如果已填充,我想提交,否则不会。另一个问题是,当我点击我的移动键盘提交按钮时,我不想提交我的表单,我只想传递给我的表单的下一个输入。 – Caaarlos

+0

@Caaarlos:你在这里谈论几个问题,每一个都应该分解成它自己的功能。表单验证可以采用多种形式。它可能与检查JavaScript代码一样简单,如果表单元素中有值,则* then *仅当条件找到空值时调用'.preventDefault()'。至于将焦点从一个表单元素传递到另一个表单元素,这应该有所帮助:http://stackoverflow.com/q/17500704/328193 – David

+0

再次感谢David,我在考虑使用'.preventDefault()'来检查是否全部我的表单的输入被填充,但'.preventDefault()'没有这样做。所以我现在改变了我的代码,让我们看看它是否是正确的形式......我创建了一些var,它接收我的元素的值,如下所示:'var usuarioNome = document.forms [0] .elements [1] .value ;',现在我将验证它的值是否为空或“”o“”。如果这是真的我使用'.preventDefault()'。这是正确的吗? – Caaarlos