【问题标题】:how to pass the event object to a function within an object如何将事件对象传递给对象内的函数
【发布时间】:2015-02-22 03:25:45
【问题描述】:

使用 .on 和 click 处理程序将事件对象传递给对象内的函数。它似乎不像我想象的那样工作,所以最初的 event.preventDefault() 不起作用。由于 event.preventDefault() 不起作用,提交按钮会自动打开 mail.php 页面,这显然不是我想要的。如果有人可以帮助解决这个问题或引导我朝着正确的方向前进,我将不胜感激。

我的脚本:

(function(){
    "strict";
    var portfolio = {
        email: function(event){
            event.preventDefault();
            alert("hello people");
            var form = $('#contact');
            var formMessages = $('#form-messages');
            var formData = $(form).serialize();
            $.ajax({
                type: 'POST',
                url: 'mailer.php',
                data: formData
            })
            .done(function(response) {
                // Make sure that the formMessages div has the 'success' class.
                $(formMessages).removeClass('error');
                $(formMessages).addClass('success');
                console.log(response);

                // Set the message text.
                $(formMessages).html('<p class="success">Message has been sent succesfully! Thank you '+ $('#f_name').val() +', a response will be returned in less than one business day.</p>');
                // Clear the form.
                $('#f_name').val('');
                $('#f_email').val('');
                $('#f_message').val('');
                $('#f_website').val('');
                $('#f_budget').val('');
                $('#f_hear').val('');
                $('#f_startdate').val('');
                $('#f_phone').val('');
                form.fadeOut('slow').remove();
            })
            .fail(function(data) {
                // Make sure that the formMessages div has the 'error' class.
                $(formMessages).removeClass('success');
                $(formMessages).addClass('error');

                // Set the message text.
                if (data.responseText !== '') {
                    $(formMessages).html('<p>'+data.responseText+'</p>');
                } else {
                    $(formMessages).html('<p>Oops! An error occured and your message could not be sent.</p>');
                }
            });
        },
    }; 

$('body').on('click', '.contact', portfolio.email(event));

【问题讨论】:

    标签: javascript event-handling


    【解决方案1】:

    当你说:

    $('body').on('click', '.contact', portfolio.email(event));
    

    那么事件将被发送到portfolio.email(event)返回的任何东西,这当然是无效的。

    只需传递函数名:

    $('body').on('click', '.contact', portfolio.email);
    

    【讨论】:

    • 我最初尝试过,但 e.preventDefault() 不起作用。
    • 所以我想我会尝试看看如果我从点击事件中传递事件对象并且它也失败了。
    • “e.preventDefault() 不起作用”是什么意思?你想防止什么?
    • 从提交到mail.php文件的表单
    • 出于某种原因,我尝试了您所说的,这次成功了。 Codekit 一定是在我上次尝试时冻结了,或者我忘了点击保存。谢谢你的帮助。
    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    相关资源
    最近更新 更多