0

我有几个 div,单击它们会打开一个带有文本字段的花式框,该文本字段接收一条消息,然后保存表单。当我想重用它时,这不起作用,即对多个表单使用相同的函数和代码。它总是假装是第一个按钮。每次我使用它时,它运行回调函数的次数都会增加。有谁知道我做错了什么?我尝试添加 each(),但没有帮助。

我很抱歉简短的解释,看代码时更清楚了(注意:我使用console.log作为输出):http: //jsfiddle.net/EvYvc/11/

基本上:我不知道是什么元素调用了 click 函数并获取它的属性。

4

2 回答 2

0

我不是 FancyForm 插件方面的专家。但我认为您正在多次绑定 click 事件,因为您将它绑定在beforeShow处理程序中。

尝试自行绑定 click 事件:

http://jsfiddle.net/h8sVY/

$(".reason_submit2").each(function() {
    $(this).fancybox({
        openEffect: 'none',
        closeEffect: 'none',
        'modal': true
    });
});

$(".fancyConfirm_ok").click(function() {
    $.fancybox.close();
    // etc...
});
​
于 2012-05-15T14:01:17.340 回答
0

几个变化,

  1. 您需要在 beforeShow 之外绑定点击处理程序
  2. 我认为您无法识别reason_submit2在 beforeShow 中单击了哪个链接

或者,我为链接定义了 2 个 var 和一个单击处理程序,该处理程序将存储nameform,稍后将在fancyConfirm_ok

完整代码:

$(function() {
    var r2sName = '', r2sForm = '';
    $(".reason_submit2").fancybox({
        openEffect: 'none',
        closeEffect: 'none',
        'modal': true
    }).click(function () {
        var $this = $(this);
        r2sName = $this.data("name");
        r2sForm = $this.data("form");        
    });

    jQuery(".fancyConfirm_ok").click(function() {
        $.fancybox.close();

        console.log('form : ' + r2sForm);
        console.log('name : ' + r2sName);
        console.log('message : ' + $("[name=reason2]").val());

        $($(".reason_submit2").data("form")).append($("<input>").attr("type", "hidden").attr("name", "reason").val($("#reason").val()));
        $($(".reason_submit2").data("form")).append($("<input>").attr("type", "hidden").attr("name", $(".reason_submit2").data("name")));
        //document.forms[$(".reason_submit2").data("form")].submit();
    });
});

演示

其他技巧是在 click 处理程序中向 clicked 链接添加一个类,并使用该类来获取nameand forminside fancyConfirm_ok,但我个人觉得这样更好。

于 2012-05-15T14:28:37.490 回答