5

特定の動作を引き起こす前に要素にデータ変数を追加したいのですが、これには複数のデータ パラメータを追加する必要がある場合があります。どうすればこれを達成できますか?

     $("#dlg_box").data("r_redirect","index.php").dialog("open");
4

5 に答える 5

4

JQuery のdata()メソッドも、JS オブジェクトをパラメーターとして受け取ります。{"r_redirect": "index.php", "whatEver": "youWant" ...}したがって、 etc を渡して、要件に一致する複数の値を渡すことを考えるかもしれません。

最終的に、このdata()メソッドはパラメーターをオブジェクトに変換します。したがって、オブジェクトまたはキーと値を別々に渡すかどうかは問題ではありません

于 2013-05-21T13:29:33.110 に答える
4

jQuery ダイアログにデータを添付するには、さまざまな方法があります。複数のデータを添付する必要がある場合は、 を使用することをお勧めし.data("myData", { /* OBJECT */ }ますが、インライン文字列と配列データを使用することもできます。あなたのコードが機能しない理由については、コードがほとんどないため、多くのことが考えられます。ただし、「params」またはデータを使用したダイアログの実際の例を添付して、例を示します。ヘッダー コードをさらに投稿すると、構文エラーや "doc ready" の欠落が見つかる可能性があると思います。ほんの少しの考え。とにかく、私の例:

jsフィドル

$(function() {
    //    Set the dialog to not open on load and clear all changes made when closed
    $("#dlg").dialog({
        autoOpen: false,
        modal: true,
        close: function(e) {
            $(this).children("input").nextAll("p").remove();
        }
    })    //    next i call for my first inner button which will show you how to get "attached" data
    .children("#attached").on("click", function(e) {
        var dlgData = $("#dlg").data("myData");
        $(this).after($("<p />").text(dlgData.data1 + " " + dlgData.data2));
    })    //    finally, the button that will get the string data that was added in the HTML
    .next("#inline").on("click", function(e) {
        var dlgData = $("#dlg").data("inline");
        $(this).after($("<p />").text(dlgData));
    });
    //    simply open our dialog
    $("button").on("click", function(e) { 
        //    HERE data is ATTCHED to our dialog just before opening
        $("#dlg").data("myData", { data1: "Hello", data2: "world" }).dialog("open") 
    });
});
于 2013-05-21T13:47:30.037 に答える
0

これを使用する前に知っておくべきいくつかのルールがあります!

追加中

$('.selector').data() から返されたオブジェクトを使用して変数を追加することは、データ オブジェクトが参照によって渡されるため機能するため、プロパティを追加するとどこにでも追加されます。別の要素で data() を呼び出すと、変更されます。それはそれが何であるかです...

オブジェクトを追加すると、データ オブジェクト内にオブジェクトが配置されるだけでなく、「その要素で以前に格納されたデータが拡張されます」。- http://api.jquery.com/data/#entry-longdesc

つまり、obj を dataObj に追加すると、

dataObj === { /*previous data*/, obj : { } }

配列を追加しても、以前に保存されたデータは拡張されませんが、単純な値と同じようには動作しません...

使用中

単純な値が格納されている場合は、それらを変数に配置して、データ オブジェクトを変更せずに、必要な処理を行うことができます。

でも

要素にデータを格納するためにオブジェクトまたは配列を使用している場合は、注意してください!

変数に保存したからといって、データ値を変更していないわけではありません。関数に渡すからといって、データ値を変更していないわけではありません!

それはそれが何であるかです..それが単純でない限り..それは単なるコピーです. :p

var data             = $("#id").data();  // Get a reference to the data object 
data.r_redirect      = "index.php";      // Add a string value
data.num             = 0;                // Add a integer value
data.arr             = [0,1,2];          // Add an array
data.obj             = { a : "b" };      // Add an object

                                         // but here is where the fun starts! 

var r_redirectString = data.r_redirect;  // returns "index.php", as expected.. cool
r_redirectString     = "changed"         // change the value and the compare :
data.r_redirect      == r_redirectString // returns false, the values are different

var oArr             = data.arr;         // Now lets copy this array
oArr.push(3);                            // and modify it.
data.arr            == oArr              // should be false? Nope. returns true.
                                         // arrays are passed by reference.
                                         // but..

var oObj             = data.obj          // what about objects?       
oObj["key"]          = "value";          // modify the variable and
data.obj["key"]     == oObj["key"]       // it returns true, too!

だから、リソース..

jQueryの$.data()に複数の値を保存する最良の方法は何ですか? https://stackoverflow.com/a/5759883/1257652

于 2013-05-21T13:27:22.657 に答える