14

これは簡単な質問かもしれませんが、うまく機能させることができません。jQuery ダイアログを使用して、Web サイトの別のページから読み込まれたフォームを表示しています。ユーザーがリンクをクリックすると、ダイアログが起動します。私がやろうとしているのは、HTML をダイアログにロードした後に関数を実行することです。ダイアログをロードするコードは次のとおりです。

$(document).ready(function () {
    $(".openDialog").live("click", function (e) {
        e.preventDefault();

        $("#dialogBox").dialog({
            title: $(this).attr("data-dialog-title"),
            close: function() { $(this).remove() },
            modal: true
        })
        .load(this.href);
    });

    $(".close").live("click", function (e) {
        e.preventDefault();
        $(this).closest(".dialog").dialog("close");
    });
});

HTML がダイアログにロードされたときに呼び出したい関数 myFunction() があります。かなり調べた後、次のように .load で関数を指定してみました。

.load(this.href, myFunction());

次のように、openイベントも使用してみました。

open: myFunction(),

私は何を間違っていますか?

4

5 に答える 5

34

解決策 1:

.load(this.href, myFunction);

解決策 2:

.load(this.href, function(){
  myFunction();
});

解決策 #3 (推奨):

open: myFunction,

解決策 4:

open: function(){
  myFunction();
}

何故ですか?

var foo = myFunction(); // `foo` becomes your function return value
var bar  = myFunction; // `bar` becomes your function
bar();

コードは次のようになります。

$("#dialogBox").load('http://example.com').dialog({
  title: $(this).attr("data-dialog-title"),
  close: function() { $(this).remove() },
  modal: true,
  open : myFunction // this should work...
})
于 2012-09-09T07:33:34.967 に答える
4

解決策はどれもうまくいきませんでした。openダイアログが開いたときにコールバックが呼び出されないためだと思います。私はsetTimeoutそれを機能させるためにaを使わなければなりませんでした。

$('#dialogBox').dialog('open');

setTimeout(function(){
    // myFunction();
},100);

それは明らかに中身に依存しmyFunctionます。

于 2014-11-10T13:55:28.127 に答える
2

jQuery UI - v1.11.4 の場合、以下のコード スニペットの「完了」は機能しなくなりました。

show: {
    effect: 'clip',
    complete: function() {
        console.log('done');
    }
},

jQuery UI - v1.11.4 で機能しているソリューション。:

ダイアログ表示でjquery効果にコールバックをアタッチする方法は?

losnirで提案されているように、 $(this).parent().promise().done を使用します。

$("#dialog").dialog({
show: {
    effect: "drop",
    direction: "up",
    duration: 1000
},
hide: {
    effect: "drop",
    direction: "down",
    duration: 1000
},
open: function () {
    $(this).parent().promise().done(function () {
        console.log("[#Dialog] Opened");
    });
},
close: function () {
    $(this).parent().promise().done(function () {
        console.log("[#Dialog] Closed");
    });
}
});

お役に立てれば。

于 2015-11-25T08:56:47.347 に答える