javascript - 电子邮件JS : Only works sometimes

标签 javascript reactjs email contact-form

我正在使用 React 和 EmailJS 设计联系表单。我的问题是,当我输入自己的姓名、电子邮件、电话或消息值时,电子邮件不起作用。当我单击“发送消息”按钮而不在“姓名”、“电子邮件”、“电话”或“消息”中输入任何内容(因此它使用默认值)时,它有时会起作用(通常不是在第一次单击该按钮时,而是在第二次单击时)。

我不知道如何解决这个问题,希望得到一些帮助!


export default class Contact extends React.Component {
    constructor(props) {
        super(props);
        this.state = { message: '', name: 'Name', email: 'Email', phone: 'Phone' };
        this.handleChange = this.handleChange.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
      }

      handleChange(event) {
        this.setState({
          [event.target.name]: event.target.value
        });
    }

      handleSubmit (event) {
        var template_params = {
            "name": "name_value",
            "message": "message_value",
            "phone": "phone_value",
            "email": "email_value"
         }

         var service_id = "default_service";
         var template_id = <TEMPLATE_ID_FROM_EMAILJS_ACCOUNT>;
         window.emailjs.send(service_id, template_id, template_params).then(res => {
             console.log('MESSAGE SENT', res.status);
             alert("Message Sent!");
         }).catch(e => {
             console.log("There was an error", e);
         }); 
      }

    render() {

        return (
            <section className="page-section" id="contact">
                <div className="container">
                <div className="row">
                    <div className="col-lg-12 text-center">
                    <h2 className="section-heading text-uppercase">Contact Us</h2>
                    <h3 className="section-subheading text-muted">Fill in the form below to contact us through email</h3>
                    </div>
                </div>
                <div className="row">
                    <div className="col-lg-12">
                    <form id="contactForm" name="sentMessage" noValidate="noValidate">
                        <div className="row">
                        <div className="col-md-6">
                            <div className="form-group">
                            <input className="form-control" id="name" name="name" type="text" placeholder="Your Name *" required="required" data-validation-required-message="Please enter your name." onChange={this.handleChange} value={this.state.name}></input>
                            <p className="help-block text-danger"></p>
                            </div>
                            <div className="form-group">
                            <input className="form-control" id="email" name="email" type="email" placeholder="Your Email *" required="required" data-validation-required-message="Please enter your email address." onChange={this.handleChange} value={this.state.email}></input>
                            <p className="help-block text-danger"></p>
                            </div>
                            <div className="form-group">
                            <input className="form-control" id="phone" name="phone" type="tel" placeholder="Your Phone *" required="required" data-validation-required-message="Please enter your phone number." onChange={this.handleChange} value={this.state.phone}></input>
                            <p className="help-block text-danger"></p>
                            </div>
                        </div>
                        <div className="col-md-6">
                            <div className="form-group">
                            <textarea className="form-control" id="message" name="message" placeholder="Your Message *" required="required" data-validation-required-message="Please enter a message." onChange={this.handleChange} value={this.state.message}></textarea>
                            <p className="help-block text-danger"></p>
                            </div>
                        </div>
                        <div className="clearfix"></div>
                        <div className="col-lg-12 text-center">
                            <div id="success"></div>
                            <button id="sendMessageButton" className="btn btn-primary btn-xl text-uppercase" type="submit" onClick={this.handleSubmit}>Send Message</button>
                        </div>
                        </div>
                    </form>
                    </div>
                </div>
                </div>
            </section>
        )
        }
}

最佳答案

对此不确定,但似乎您没有阻止提交的默认行为,因此您的页面刷新,您的表单是新的,并且您的函数未被调用。 尝试添加

event.preventDefault();

在handleSubmit函数的开头。

关于javascript - 电子邮件JS : Only works sometimes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60923331/

相关文章:

javascript - 在具有相同类的所有元素上添加 Click 事件,无需循环和 jQuery

javascript - 突出显示句子中的单独关键字

javascript - 如何在没有任何客户端运行的情况下更改 Firebase 上的数据?

javascript - 适用于 AngularJS 的 Google map - 单击标记时信息窗口未设置在正确的位置

magento - 客户登录 magento 后禁用重定向

javascript - 在 React 中隐藏和显示循环组件

php - 当新产品添加到数据库时如何自动向用户发送电子邮件?

email - 拆分测试交易电子邮件

iphone - 以编程方式打开iPhone的邮件客户端

javascript - 在 React.js 应用程序中使用 freshdesk 反馈小部件