0

ほろ酔いプラグインのフォールバックを更新するためにこのコードを試しています。最初の関数の外部で変数にアクセスするにはどうすればよいですか?変数をオーバーライドして更新を行うことができます、正しいですか?

<script type="text/javascript">
$(document).ready(function () {
    var a ="Login";
    $("#login_form").submit(function () {
        var formdata = $("#login_form").serializeArray();
        $.ajax({
            url: "ajax_login.php",
            type: "post",
            dataType: "json",
            data: formdata,
            success: function (data) {
                if (data.livre === 'complete') {
                    var a ="success";
                } else 
                    var a = "Error";
            }
        });
return false;
    });
});
</script>

<script type='text/javascript'>
$(document).ready(function () {
    $('.login_fields input[rel=tipsy]').tipsy({gravity: 'w', trigger: 'manual', fallback: a }); // a is not defined
});
</script>
4

5 に答える 5

3

2 番目の document.ready ブロック内のコードを最初のブロックに移動するか (呼び出しでa変数にアクセスできるようにします)、変数をグローバルにします。.tipsy()a

<script type="text/javascript">
$(document).ready(function () {
    var a ="Login";
    $("#login_form").submit(function () {
        var formdata = $("#login_form").serializeArray();
        $.ajax({
            url: "ajax_login.php",
            type: "post",
            dataType: "json",
            data: formdata,
            success: function (data) {
                if (data.livre === 'complete') {
                    a ="success";
                } else 
                    a = "Error";
            }
        });
return false;
    });
    $('.login_fields input[rel=tipsy]').tipsy({gravity: 'w', trigger: 'manual', fallback: a });

});
</script>

また

<script type="text/javascript">
var a = "Login";
$(document).ready(function () {
    $("#login_form").submit(function () {
        var formdata = $("#login_form").serializeArray();
        $.ajax({
            url: "ajax_login.php",
            type: "post",
            dataType: "json",
            data: formdata,
            success: function (data) {
                if (data.livre === 'complete') {
                    a ="success";
                } else 
                    a = "Error";
            }
        });
return false;
    });
});
</script>

<script type='text/javascript'>
$(document).ready(function () {
    $('.login_fields input[rel=tipsy]').tipsy({gravity: 'w', trigger: 'manual', fallback: a }); // a is not defined
});
</script>

varAJAX 呼び出しの成功コールバックから宣言を削除したことに注意してください。

アップデート

の更新された値をtipsyに渡すには、コールバック関数で呼び出しaを実行する必要があります。.tipsy()今のように実行して、コールバック関数でほろ酔いプラグインを更新することもできます(ただし、私はプラグインに精通しておらず、これを行う方法を知りません):

<script type="text/javascript">
$(document).ready(function () {
    var a ="Login";
    $("#login_form").submit(function () {
        var formdata = $("#login_form").serializeArray();
        $.ajax({
            url: "ajax_login.php",
            type: "post",
            dataType: "json",
            data: formdata,
            success: function (data) {
                if (data.livre === 'complete') {
                    a ="success";
                } else {
                    a = "Error";
                }
                $('.login_fields input[rel=tipsy]').tipsy({gravity: 'w', trigger: 'manual', fallback: a });
            }
        });
return false;
    });
});
</script>
于 2011-11-08T19:52:53.147 に答える
1

ほろ酔いプラグイン自体fallbackをハッキングせずに、Tipsy オブジェクトを作成した後でプロパティを変更することはできません。

パラメータが文字列の場合、関数が実行されるfallbackとすぐに解釈されます。$().tipsy({...})したがって、後で変数の値を変更しても、パラメーターaは変更されません。fallback

fallback最初はオブジェクトからプロパティを直接更新するだけで済むと思って$.fn.tipsy.defaultsいたのですが、新しいTipsyオブジェクトを作成すると、fallback基本的にその中にプロパティがコピーされるので、fallback永久に初期値が保存されてしまいます。

解決策の 1 つは、Tipsy プロジェクトをフォークし、fallbackプロパティを変更して、文字列またはfunction(). このように、次のようなことが可能ですfallback: function (){ return a;}

于 2011-11-08T23:12:03.340 に答える
0

a変数を ready 関数の外に移動します。

<script type="text/javascript">
    var a ="Login";
    $(document).ready(function () {

varまた、成功関数でキーワードを使用しないでください。ready 関数の先頭で定義された変数の値を設定するのではなく、変数を再宣言しています。

 success: function (data) {
            if (data.livre === 'complete') {
                a ="sucess";
            } else 
                a = "Error";
        }
于 2011-11-08T19:52:18.450 に答える
0

グローバルにすることができます。それがあなたがすべきことかどうかによって異なります。

すべてがドキュメント対応で実行されている場合、グローバルを使用する理由はありません。ajaxの成功から2番目のdocreadyからコードを実行するだけです(または、必要に応じて完了します)。

言いにくい; スニペットがどれだけ現実に近いかはわかりません。

于 2011-11-08T19:52:42.243 に答える
0

1) Document.ready が 2 つあるのはなぜですか??

2) グローバル パラメータまたは $.data を使用してデータを転送できます。

3)あなたのソリューションのために - 外側を宣言するvar a ="Login";か、グローバル変数のスコープを保持する自己実行機能を使用してください。

于 2011-11-08T19:53:41.487 に答える