-1

匿名のトリガーハンドラー自体ではなく、ハンドラーが設定されている関数を返すことをジョブとするイベントハンドラーを設定する必要があります。これはどのように達成できますか?以下のコードを参照してください。

if(subFormToServer())
    doSuccessDance();
else
    doErrorStuff();

function subFormToServer(thaGoods) {
  $('<iframe name="subform-target" style="display: none;"></iframe>')
    .bind('load',  function(){ return 0; }) // how to I "pass" these return statements "up" to my function or "escape" them, so to speak, so that what they're returning isn't the load/error handler functions, but actually the subFormToServer function?
    .bind('error', function(){ return 1; })
    .appendTo('body');

 $('<form method="POST" '+
          'action="http://server/formHandler.php" '+
          'target="subform-target"> '+

        '<input name=inputName              value="'+encodeURIComponent(thaGoods)+'">'+

    '</form>')[0]
    .submit();
}
4

1 に答える 1

4

それは不可能です。次の場合は、この状況を考慮してください。

// Assume form takes 10 seconds to respond
var x = subFormToServer(...)

// form has neither loaded nor errored yet - what does x contain?
alert(x)

あなたの最善の策は:

subFormToServer(thaGoods, doSuccessDance, doErrorStuff);

function subFormToServer(thaGoods, worked, didnt) {
    $('<iframe name="subform-target" style="display: none;"></iframe>')
        .on('load',  worked)
        .on('error', didnt)
        .appendTo('body');

    $('<form />', {
        method: "POST",
        action: "http://server/formHandler.php",
        target: "subform-target"
    }).append(
        $('<input />', {
            name: "inputName",
            value: encodeURIComponent(thaGoods)
        })
    ).submit()
}
于 2012-08-19T09:14:54.800 に答える