我遇到了一个奇怪的错误,希望很容易解决。虽然人们收到带有+标志的电子邮件可能并不常见,但这是我测试表单提交的一种方式。此外,如果它正在剥离我尚未测试的其他角色,那显然也是一个问题。
基本上,我说使用:test.email@gmail.com。它提交的很好,一切都很好。如果我使用test.email+2@gmail.com,它在我的CRM中显示为“test.email”,所以+之后的所有内容也会被删除。如果我在联系人记录中打开表单提交,它将显示为“test.email 2@gmail.com”,其中包含+所在的空格。
在Chrome中不会发生这种情况,但在Safari和Firefox中确实会发生这种情况。我还应该提一下,这是在模态中验证的,这就是字段最初使用data-parsley-excluded
的原因。使用jQuery删除这些属性,然后添加所需的属性。
<form accept-charset="UTF-8" id="become-sponsor-form" class="x-form" method="POST" novalidate>
<input name="x-name" type="hidden" value="xxxx" />
<input name="x-name2" type="hidden" value="X Value" />
<div class="bs-callout bs-callout-warning invisible mx-auto">
<p>Please fill out all required fields.</p>
</div>
<div class="form-group">
<label for="FirstName">First Name</label>
<input class="form-control" id="FirstName" name="FirstName" type="text" placeholder="Kevin" data-parsley-trigger='change' data-parsley-excluded data-parsley-group='block1'/>
</div>
<div class="form-group">
<label for="LastName">Last Name</label>
<input class="form-control" id="LastName" name="LastName" type="text" placeholder='Bacon' data-parsley-trigger='change' data-parsley-excluded data-parsley-group='block1'/>
</div>
<div class="form-group">
<label for="Email">Email</label>
<input class="form-control" id="Email" name="Email" type="email" placeholder="kevinbacon@yourcompany.com" data-parsley-type='email' data-parsley-trigger='change' data-parsley-excluded data-parsley-group='block1'/>
</div>
<div class="form-group">
<label for="Phone1">Phone</label>
<input type="tel" class="form-control" id="Phone1" minlength = '10' maxlength="14" data-parsley-error-message='Must be minimum of 10 digits' data-parsley-trigger='change' data-parsley-excluded data-parsley-group='block1'/>
<input id="hidden-number" name='Phone1' type="hidden" name="phone-full">
</div>
<div class="form-group">
<label for="CompanyType">Type of Business</label>
<input class="form-control" id="CompanyType" name="CompanyType" type="text" placeholder='Ecommerce, Marketing Agency, etc.' data-parsley-trigger='change' data-parsley-excluded data-parsley-group='block1'/>
</div>
<input type="submit" id="submit_button" value="Submit" class="btn btn-primary btn-block"/>
</form>
如果您需要,这里是JS:
<script type="text/javascript">
$(document).ready(function () {
$('#become-sponsor-btn').on('click', function() {
$("#FirstName, #LastName, #Email, #Phone1, #CompanyType").attr("required", true);
$("#FirstName, #LastName, #Email, #Phone1, #CompanyType").removeAttr("data-parsley-excluded");
$('#become-sponsor-form').parsley().on('field:validated', function() {
var ok = $('.parsley-error').length === 0;
if (this.$element.hasClass('parsley-error')) {
$('.bs-callout-warning').toggleClass('invisible', ok);
};
});
});
$("#become-sponsor-form").on('submit', function(e){
e.preventDefault();
$('#become-sponsor-form').parsley().on('form:validate', function (formInstance) {
var success = formInstance.isValid({group: 'block1'});
console.log(success);
if (success) {
var form_data = $("#become-sponsor-form").serialize();
$("#become-sponsor-form").html('<div class="loading_message text-center"><i class="fa fa-cog fa-spin fa-3x fa-fw"></i></div>');
$.post("formaction.php", form_data, function(result){
$("#become-sponsor-form").html('<div class="success_message alert alert-success text-center" role="alert">Thank You.. We will contact you soon...</div>');
});
} else {
e.preventDefault();
return false;
}
});
});
});
我不太熟悉跨浏览器与表单的兼容性,并认为向表单添加novalidate
可能会解决问题,但情况并非如此。
感谢您提前提供任何帮助!
答案 0 :(得分:0)
这与Parsley无关。删除欧芹,你会遇到同样的问题。
这与您在发布结果时尝试重新执行浏览器可以为您做的事情有关。特别是:
$('<form><input name="foo" value="a+b"></form>').serialize() // => "foo=a%2Bb"
您可能需要重新考虑您的方法并使用正确提交的解决方案,例如rails-ujs用于远程表单。你会注意到他们必须写their own serializer。您可以直接使用rails-ujs
。如果你首先绑定Parsley它应该很好地交互。