【问题标题】:Pop-up not working with Jquery/Ajax弹出窗口不适用于 Jquery/Ajax
【发布时间】:2012-11-06 06:29:47
【问题描述】:

我对 Ajax 完全陌生,但正在尝试为 django 工作提供一个反馈模块,这是一个可供用户提交反馈的选项卡。

这是模板:

<div id="feedback_button" class="white left normal"><a href="/feedback/">feedback</a></div>
<div class="hiding">
<div id="feedback_popup" class="colorbox" style="width: 500px">
    <h1>Feedback</h1>
    {% if not feedback_text %}
        <p style="margin-bottom: 0">We would be happy to consider any feedback you have.</p>
    {% else %}
        {{feedback_text}}
    {% endif %}
    <form class="feedback" action="{% url feedback.views.handle_ajax %}" method="POST" style="margin: 0">{% csrf_token %}
        <div style="display: none"><input name="body" value="..."/></div>
        <label for="email">email (optional)</label>
            <input name="email" value="{{user.email}}"/>
             <div class="email error"> </div>
        <label for="subject">subject (optional)</label>
            <input name="subject"/>
             <div class="subject error"> </div>
        <label for="text">message</label>
            <textarea name="text"></textarea>
            <div class="text error"> </div>
        <div class="buttons">
            <button>Send</button>
        </div>
    </form>
    <div class="thanks hiding">Thank you for your feedback!</div>
    <div class="general error hiding"></div>
</div>
</div>
<script>
    $(function(){
        feedback.init({
            'button':$('#feedback_button'),
            'drop':$('#feedback_drop'),
            'popup':$('#feedback_popup')
        });
        if (document.cookie == "") {
            // CSRF protection requires a cookie to be set already.
            $('#feedback_button').hide();
        }
    });
</script>

我看到了反馈按钮,但是当我单击它时,没有任何反应。因为我是 jquery/ajax 的新手,不太确定从哪里开始调试这个......有什么提示吗?

这是我在base.html 模板中调用它的地方:

<body class="{% block body_class %}{% endblock %}">
    {% include "feedback/button.html" %}
        <div id="wrapper">

这里是相关的 jquery:

var feedback = {};
feedback.init = function(config) {
    if (!(config.button && config.drop && config.popup))
        throw "invalid params";
    config.popup.find('form.feedback').ajaxSubmit({
        'onstart':function(){
            config.popup.addClass('loading');
        },
        'onend':function(){
            config.popup.removeClass('loading');
        },
        'onerror':function(why){
            alert('Error! '+why);
        },
        'onsuccess':feedback.done(config)
    });

    config.button.click(function(){
        config.drop.removeClass('hiding');
        config.popup.removeClass('hiding');
        config.popup.find('input[name=email]').focus();
    });
    config.popup.find('.close').click(feedback.closeit(config));
};

【问题讨论】:

  • 你能告诉我们feedback.init是从哪里来的吗?它是一个jquery插件吗?
  • 是的,刚刚添加了这个。这是一个jQuery插件。我检查以确保它加载的所有 jquery 插件都在我的静态目录中可用。
  • 能否将插件主页等发给我们。
  • 好的,您似乎按照github.com/jabapyth/django-feedback/tree/… 自述文件所述正确添加了代码,但这没有意义,我可以看到您的最终页面 html 是在网络上还是在本地
  • 它现在是本地的,但如果你想看,我可以把它放到网上。

标签: jquery html ajax django


【解决方案1】:

ajaxSubmit() 将立即提交表单。 使用 ajaxForm() 和:提交按钮,或连接按钮单击事件以执行 submit()。 或者在按钮单击事件期间执行 ajaxSubmit()。 像这样的东西应该可以工作(没有尝试过)......

feedback.init = function(config) {
    if (!(config.button && config.drop && config.popup))
        throw "invalid params";
    config.popup.find('form.feedback').ajaxForm({
        'onstart':function(){
            config.popup.addClass('loading');
        },
        'onend':function(){
            config.popup.removeClass('loading');
        },
        'onerror':function(why){
            alert('Error! '+why);
        },
        'onsuccess':feedback.done(config)
    });

    config.button.click(function(){
        config.drop.removeClass('hiding');
        config.popup.removeClass('hiding');
        config.popup.find('input[name=email]').focus();
        config.popup.find('form.feedback').ajaxSubmit();
    });
    config.popup.find('.close').click(feedback.closeit(config));
};

【讨论】:

    【解决方案2】:
    • 您的 JS 附件 /static/uni_form/uni-form.jquery.js 未加载 - 返回 403 Forbidden

    • 在 main.js 中的 config.popup.find('form.feedback').ajaxSubmit({ ajaxSubmit 行返回错误。也许您会将feedback.init 或所有main.js 放在$(document).ready(function(){...}); 等之间...但是请确保ajaxSubmit 在该执行点可用。

    【讨论】:

    • 好的,我修复了统一格式问题,但尝试了第二种解决方案,但似乎并没有什么不同......我尝试了两种方式——只包装feedback.init,然后包装所有@987654326 @ 在文档就绪函数中...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    相关资源
    最近更新 更多