2011-12-04 10 views
0

リンクがクリックされるとjqueryプラグインが表示され、リンクが行われる前に確認ダイアログが表示されます。jqueryは既定で表示されないようになり、追加のクリックが必要になる

問題は、「はい」ボタンを使用してダイアログを閉じるときに、プラグインが$(element).trigger('click');を使用して元のアンカー要素のクリックイベントを発生させることです。

これはブラウザがリンクをたどることはありませんが、ダイアログの後でマウスを2回クリックすると、は終了します。は動作します。

プラグインはここでプラグインあなたがプラグインに何をしたいのか含む関数を渡す必要が

;(function ($, window, document, undefined) 
{ 
    var pluginName = "submitConfirm"; 

    var Plugin = function(element) 
    { 
     var confirmed = false; 

     var dialog = $('<div style="display:none;">') 
     .html('Visit this link?') 
     .dialog(
     { 
      modal: true, 
      title: 'Visit Link?', 
      autoOpen: false, 
      buttons : 
      [ 
       { 
        text: 'Yes', 
        click: function(event) 
        { 
         confirmed = true; 
         dialog.dialog("close"); 
         $(element).trigger('click'); 
        } 
       }, 
       { 
        text: 'No', 
        click: function(event) 
        { 
         confirmed = false; 
         dialog.dialog("close"); 
        } 
       } 
      ] 
     }); 

     $(element).bind('click', 
     function(event) 
     { 
      if (! confirmed) 
      { 
       dialog.dialog("open"); 
       event.preventDefault(); 
      } 
     }); 
    }; 

    // Init the plugin 
    $.fn[pluginName] = function(options) 
    { 
     return this.each(function() 
     { 
      // Prevent re-instantiation 
      if (!$.data(this, 'plugin_' + pluginName)) 
      { 
       $.data(this, 'plugin_' + pluginName, 
       new Plugin(this, options)); 
      } 
     }); 
    }; 
})(jQuery); 

答えて

1

あるこの$('a').submitConfirm();

のように使用されます。
JavaScriptの一番下にあるプラグインのデフォルトパラメータを設定するときに、この行を追加します。

$(function() 
{ 
    $('a').submitConfirm(
    { 
     html: 'Are you sure?', 
     onConfirm: function(event){ // Do what you want in this function. 
      alert('Confirmed.. Now what?.. Redirect?.. ?? '); 
      // window.location = $(this).attr('href'); // redirect 
       }, 
     beforeShow: function(dialog) 
     { 
      dialog.html('visit google?'); 
     } 
    }); 
}); 

更新
チェックアウトこのJSfiddle - 私は、以下の行を変更>http://jsfiddle.net/kmTtQ/6/
。基本的には、.clickイベントを要素に追加し、次にクリックする.trigger('click')イベントを追加します。

if (confirmed){ 
    console.log(element, elementEvent, event.isDefaultPrevented); 
    // .on() = jQuery 1.7+, for < 1.7 use .bind or .live. Aliases of .on() as of 1.7 
    $(element).on('click', function(){ // bind our element with the click 
     event.view.window.location = element.href; // on click redirect 
    }); 

    $(element).trigger('click'); // We want to trigger the^click event^
} 
+0

onConfirmは、プラグインのデフォルトでtrueを返すようにデフォルト設定されています。そのダイアログのプラグインには、それを呼び出すボタンが設定されています。 onを確認するとtrueに戻り、プラグインのこのビットが呼び出されるはずです: 'dialog.dialog(" close "); if(確認済み){$(要素).trigger(要素イベント); } ' –

+0

私はコンソールログをプラグインに入れています。何らかの理由で、トリガーを介して起こっているアンカーのクリックがキャンセルされているように見える場合があります。 –

+0

あなたの答えを編集したい場合は、私が達成しようとしているものにもっと直接的になるように質問を再構成しました。ありがとう。 –

関連する問題