我在jQuery中有此联系表单函数writtien,但是我正在用vanllia JS实现我的网站
这是表单的HTML:
<form id="contact-form" method="post">
<label for="required_question" style="position:absolute; left:-10000px; bottom:auto; width:1px; height:1px; overflow:hidden;"></label>
<label for="required_question2" style="position:absolute; left:-10000px; bottom:auto; width:1px; height:1px; overflow:hidden;"></label>
<label for="name" style="position:absolute; left:-10000px; bottom:auto; width:1px; height:1px; overflow:hidden;">name</label>
<label for="email" style="position:absolute; left:-10000px; bottom:auto; width:1px; height:1px; overflow:hidden;">email</label>
<label for="subject" style="position:absolute; left:-10000px; bottom:auto; width:1px; height:1px; overflow:hidden;">email</label>
<label for="text" style="position:absolute; left:-10000px; bottom:auto; width:1px; height:1px; overflow:hidden;">message</label>
<label for="submit" style="position:absolute; left:-10000px; bottom:auto; width:1px; height:1px; overflow:hidden;">submit</label>
<input tabindex="-1" name="required_question" placeholder="Required..." style="position:absolute; left:-10000px; bottom:auto; width:1px; height:1px; overflow:hidden;"></input>
<input tabindex="-1" name="required_question2" placeholder="Required..." style="position:absolute; left:-10000px; bottom:auto; width:1px; height:1px; overflow:hidden;"></input>
<input type="text" name="name" placeholder="Name..." required></input>
<input type="email" name="email" placeholder="Email..." required></input>
<input type="text" name="subject" placeholder="Subject..." required></input>
<textarea name="text" placeholder="Enter your message here" required></textarea>
<input type="submit" class="submit" value="Submit."></input>
</form>
这是jquery片段:
$('#ajaxform').on('submit', function() {
$('#submit').val('Sending...');
var data = {};
$(this).find('[name]').each(function(index, value) {
data[$(this).attr('name')] = $(this).val();
});
$.post('/dss-assets/PHP/mailto.php', {term: data}).done(function(data) {
$('body').append(data);
});
return false;
});
这是我到目前为止在JS中所拥有的:
document.getElementById('contact-form').onsubmit = function(){
document.querySelector('input[type="submit"]').value = 'Sending...';
document.querySelector('input[type="submit"]').blur();
var $data = {};
var $contact_data = this.querySelectorAll('input[name], textarea[name]');
for(i = 0; i < $contact_data.length; i++){
$data[this.getAttribute('name')] = this.value;
}
Array.prototype.forEach.call($contact_data, function(index, value){
console.log($data)
});
return false;
}
似乎记录了表单数据,但返回的值为'null:undefined';请帮忙!
答案 0 :(得分:1)
我相信您的问题是this
this.getAttribute
和this.value
一词将引用表格,而不是单个输入的DOM。
[EDIT]我建议的一件事是使用forEach
返回的NodeList一部分的querySelectorAll
方法,如下所示:
var $data = {};
var $contact_data = this.querySelectorAll('input[name], textarea[name]');
$contact_data.forEach(function($input) {
$data[$input.getAttribute('name')] = $input.value;
});
以这种方式执行此操作可以消除对迭代器的需求,并且更加干净。如果您不需要$contact_data
变量,也不需要它,则可以使用:
var $data = {};
his.querySelectorAll('input[name], textarea[name]').forEach(function($input) {
$data[$input.getAttribute('name')] = $input.value;
});
我希望这会有所帮助。
答案 1 :(得分:1)
您引用表单元素而不是输入。您应该更改:
$data[this.getAttribute('name')] = this.value;
到
$data[$contact_data[i].getAttribute('name')] = $contact_data[i].value;