0

これは皆さんにとって奇妙なものです。この問題は、false を返すか、最初の void を返すことに関連していると思います。ボタンがあります……。

<a href="javascript:void(0)" id="csv1" onclick="formexport(vars etc)">Click me<a>

次に、関数内で、渡された変数に基づいてExcelファイルを生成するphpページへのajax呼び出しを行い、完了時にonclickプロパティを削除し、hrefプロパティを新しく作成されたファイルへのリンクに置き換えてからクリックしますボタンを押します。例えば...

function formexport(what, formname, tabid, start, finish, folder){
    $filename = ("/clients/" + folder + "/" + $formname + "-" + finish + ".csv");
    $.ajax({
        url: "formexport.php?rand=" + new Date().valueOf(),
        type: "POST",
        data: { start: start, finish: finish, tab: tabid, form: formname, filename: $filename }
    }).done(function(data){
            $('#' + what).attr('href', data).removeAttr('onclick');
            setTimeout(function() { $('#' + what).click(); }, 20);
    });
    return false;
}

"What" は単にボタンの id であるため、再度ターゲットにすることができます。これは、2番目のボタンクリックを除いてすべて機能します。ボタンの上にカーソルを合わせると、href は実際にファイル リンクに変更されましたが、2 回目に自動クリックされることはありません。最初の関数からの false の戻り値なのか、それとも javascript:void(0) なのか、よくわかりません。どんな助けでも大歓迎です。私はスタックの他の場所で、人々がファイルをフレームにロードしたり、ファイルリンクを機能させるためにあらゆる種類のものを読んだりしているのを読みましたが、これはより論理的でクリーンだと思います。

4

1 に答える 1

0

別の StackOverflow の質問であるjquery click does not work on hyperlinkは、「なぜこれが機能しないのか」に対する簡単な答えを提供します。

注意すべき重要なことは、リンクのクリックが重複しないことです。関連するイベントのみをトリガーします。

あなたの質問が言及していない重要なものがない限り、あなたの質問には非常に単純な解決策がある可能性があります。変更するだけです:

  $('#' + what).attr('href', data).removeAttr('onclick');
  setTimeout(function() { $('#' + what).click(); }, 20);

に:

  window.location.href = data;
于 2013-09-05T22:19:49.703 に答える