0

Q1:我的观点是创建与数组行一样多的按钮。像这样,只出现一个按钮。

<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。它不附加。

幸运的是,jQuery 有一个你想要的行为的方法,恰当地称为append. 将其更改为如下所示:

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

我故意将 onclick 行为排除在该片段之外。您可以像以前一样在您创建的按钮的 html 中编写它,或者您可以使用 jQuery 来编写它 - 第二种方法更可取,看起来像这样:

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 回答