0

クリックすると、メッセージを受け取ってフォームを保存するテキストフィールドのあるファンシーボックスが開きます。これは、再利用したい場合、つまり複数のフォームに同じ関数とコードを使用する場合には機能しません。常に最初のボタンのふりをします。そして、使用するたびに、コールバック関数を実行する回数が増えます。誰かが私が間違ったことを知っていますか? each() を追加しようとしましたが、役に立ちませんでした。

簡単な説明で申し訳ありませんが、コードを見るとより明確になります (注: 出力には console.log を使用します): http://jsfiddle.net/EvYvc/11/

基本的に:どの要素がクリック機能を呼び出し、その属性を取得したかを知りたくありません。

4

2 に答える 2

0

私は FancyForm プラグインの専門家ではありません。beforeShowしかし、ハンドラー内でバインドしているため、クリックイベントを複数回バインドしていると思います。

代わりに、クリック イベントを単独でバインドしてみてください。

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_submit2beforeShow 内でクリックされたリンクを特定できないと思います

または、2 つの var と、後で使用される and をname格納するリンクのクリック ハンドラーを定義しました。formfancyConfirm_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();
    });
});

デモ

他のトリックは、クリックハンドラー内のクリックされたリンクにクラスを追加し、そのクラスを使用して内部のnameandを取得することですが、個人的にはこれが優れていると感じています。formfancyConfirm_ok

于 2012-05-15T14:28:37.490 に答える