1

私のサイトには正常に機能している mailto リンクがあります。ただし、ユーザーがそのリンクをクリックしたときにログに記録するために、 .click() イベントを実行したいと考えています。.click イベントが動作し、ajax リクエストを実行していますが、mailto リンクでメール クライアントが開かなくなりました。クライアントが開く前にjquery関数を実行することは可能ですが、それでもクライアントを開くことはできますか?

ここに私が持っているコードがあります(ブラウザで空白のウィンドウを開くだけです)

<script type='text/javascript'>
                    jQuery('span.email a').on('click',function (){
                        jQuery.ajax({
                            type: 'POST',
                            url: '', //url here
                            data: {comment: 'Email Sent', category : 'EE', store_id: '" . $this->store_id . "'},
                            success: function (data){jQuery('#alerts').html(data);}
                        });
                    window.location.href= $(this).prop('href');
                });
                </script>
4

2 に答える 2

5

これを機能させるには、async を false に設定する必要があります。

http://jsfiddle.net/5nwu7/3/を参照してください

<script type='text/javascript'>
                jQuery('span.email a').on('click',function (){
                    jQuery.ajax({
                        type: 'POST',
                        url: '', //url here
                        data: {comment: 'Email Sent', category : 'EE', store_id: '" . $this->store_id . "'},
                        success: function (data){jQuery('#alerts').html(data);},
                        async: false
                    });
                //You don't need this ---window.location.href= $(this).prop('href');
            });
            </script>

これは、ブラウザによっては、メール クライアントを開くときに現在の ajax リクエストをキャンセルするためです。これをテストするには、私が投稿した jsfiddle に移動し、非同期行を削除します (chrome 23.0.1271.97 m、windows 7、outlook 2007 でテスト済み)。

于 2013-01-04T21:48:56.157 に答える
3

は必要ありませんwindow.location.href= $(this).prop('href');。クリックを通常どおり続行すると、希望どおりの結果が得られます。

于 2013-01-04T21:09:23.433 に答える