0

Q1:私のポイントは、配列の行と同じ数のボタンを作成することです。このように、ボタンは1つだけ表示されます。

<script type="text/javascript">
var myArray = [];

$('#button').click(function(){

var value1 = $('#value1').val();
var value2 = $('#value1').val();
var value3 = $('#value1').val();
var newArray = []; 
var newArray[0] = value1;
var newArray[1] = value2;
var newArray[2] = value3;
myArray.push(newArray);

$("#save").append(
    $("<button>").click(function() {
        myFunction.apply(null, myArray);
    }).text("Click me!")
   );
   });

});

function myFunction(value1,value2,value3)
{
var jsonData = $.ajax({
url: "file.php?value1=" + value1 + "&value2=" + value2 + "&value3=" + value3
dataType: "json",
async: false
}).responseText;
(...)
}
//edited: problem maybe found. I said buttons dont do anything because of this.
OUTPUT: file.php?value1=paul,23,USA&value2=undefined&value3=undefined
//it seems that value1 gets all values :s
</script>


<div id ="save"></div>

私はこのような何かを返す解決策を探しています:

例えば:

<!--<button onclick="myFunction(name,age,country)">Click me</button>-->
<button onclick="myFunction(paul,23,USA)">Click me</button>
<button onclick="myFunction(john,23,USA)">Click me</button>

より多くの詳細で私のコードを編集しました

4

6 に答える 6

4

.htmlが置き換えられ、見積もりが一致しません。ただし、それは問題ではありません。jQueryは、文字列の操作よりもDOMの操作に優れています。試す:

$("#save").append(
    $.map(myArray, function(item) {
        return $("<button>").click(function() {
                   myFunction.apply(null, item);
               }).text("Click me");
    })
);

これがデモです。

于 2012-11-26T02:55:06.230 に答える
2

あなたはこれを意味しました:

    <div  id="save">
    </div>      
    <script type="text/javascript">
        function addButtons(){
            for(i=0;i<myArray.length;i++)
            {
                var button = $('<button id="btn_'+i+'" onclick="myFunction(this);">Click me</button>')
                $(button).data('details',myArray[i]).appendTo("#save");
            }
        }
        function myFunction(element){
            alert($(element).data('details'));
        }
    </script>
于 2012-11-26T02:31:20.173 に答える
2

.html()メソッドが要素のhtmlを置き換えるため、ボタンは1つしか表示されません。追加しません。

幸いなことに、jQueryには、適切に呼ばれる、必要な動作のためのメソッドがありますappend。次のように変更します。

for(i=0;i<myArray.length;i++)
{
  var button = $("<button>Click me</button>");
  $("#save").append(button) ;
}

そのスニペットから意図的にonclick動作を除外しました。これまでのように、作成したボタンのhtmlに書き込むことも、jQueryを使用して行うこともできます。2番目の方法が推奨され、次のようになります。

for(i=0;i<myArray.length;i++)
{
  var button = $("<button>Click me</button>")
               .click(function(){
                    // call the actual function you want called here
               });
  $("#save").append(button);
}
于 2012-11-26T02:32:43.130 に答える
1

これは$("#save")、ループ内のhtmlを置き換えているためです。試す
$("#save").append("<button onclick="myFunction('"+myArray[i]+"')">Click me</button>") ;

于 2012-11-26T02:29:28.590 に答える
0

すべてのJQueryと複雑なコードに煩わされる理由は、単純な方法でこれを実装するだけです。

<script type="text/javascript" >
    var myArray = ["New York", "Boston", "San Jose", "Los Angeles"];

    var strHTML = "";
    for(i=0;i<myArray.length;i++)
    {
        strHTML += "<button onclick='myFunction("+i+")'>Click me</button>";
    }       

    $("#save").innerHTML = strHTML;

    function myFunction(index)
    {
        alert(index);
        // do your logic here with index
    }
</script>
于 2012-11-26T03:10:15.673 に答える
0
for(i=0;i<myArray.length;i++){
    //Create a new DOM button element ( as jQuery object )
    // Set the current button index, and add the click action
    var button = $('<button />').data('myindex', i).click(function(){
        var myArrayItem = myArray[$(this).data('myindex')];
        alert(myArrayItem);
    }).html('My label n. '+i);
    $('#save').append(button)
}
于 2012-11-26T02:30:13.507 に答える