2017-01-06 66 views
1

我正在尝试创建一个由php数据库调用组成的下拉列表,该列表以json格式返回值。 jsonload所做的第一个功能是返回包含在字段中的这个json的两个字段。 然后我想要做的是将这个作为一个变量传递给子函数,函数的optionload,形式。它将作为字符串添加到哪里。这会给我我的下拉列表,然后当我添加额外的行时,下拉列表已经完成。在两个文件之间传递一个变量javascripts

<!doctype html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"> 
    </script> 
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> 
<link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet"> 
<title>Form</title> 
</head> 

<body> 
<form name="codexworld_frm" id="form1" method="post"> 
<div class="field_wrapper"> 
<div> 
    <h3><a href="javascript:void(0);" class="add_button" title="Add Field">Add POS Item</a> </h3> 
</div> 
</div> 
<input type="submit" value="Submit"> 
</form> 
</body> 
<script type="text/javascript"> 
    // JavaScript Document 
    var globalVariable; 
$(document).ready(function jsonload(data){ 
    $.getJSON("http://localhost/test/php/psql.php", function(data) 
      { 
     var options = ""; 
     for (var i = 0; i < data.length; i++) 
      { 
       options +="<option value=\"" + data[i].POSID + "\">" + data[i].Product + "</option>"; 
       //console.log(data[i].POSID + " " + data[i].Product); 
      } 

     var globalVariable=options; 
     console.log(globalVariable); 
    }); 
}); 


$(document).ready(function forms(){ 
     var maxField = 50; //Input fields increment limitation 
     var addButton = $('.add_button'); //Add button selector 
     var wrapper = $('.field_wrapper'); //Input field wrapper 
     //var fieldHTML = {row :function(f){ 
         //return '<h3><div>Item <input type="text" name="field_name['+f+'][]" value=""/>Material <input type="text" name="field_name['+f+'][]" value=""/><a href="javascript:void(0);" class="remove_button" title="Remove Field"><i class="material-icons" style="font-size:24px; color:blue">remove_circle</i></a></div></h3>'; 
         //}}; 
     var fieldHTML = {row :function optionload(f){ 
      var local = globalVariable; 
      console.log(local); 
      //event.preventDefault(); 
         return '<div>Item<input type="text" name="field_name['+f+'][]" value=""/>Material <select name="field_name['+f+'][]"><option value=""></option>' + local + '</select><a href="javascript:void(0);" class="remove_button" title="Remove Field"><i class="material-icons" style="font-size:24px; color:blue">remove_circle</i></a></div>'; 
     }}; 
     var x = 1; //initial field counter is 1 
     $(addButton).click(function(){ //Once add button is clicked 
      if(x < maxField){ 
       x++; 
       $(wrapper).append(fieldHTML.row(x)); //Add field html 
      } 
      }); 
     $(wrapper).on('click', '.remove_button', function(e){ //Once remove button is clicked 
         e.preventDefault(); 
     $(this).parent('div').remove(); //remove field html 
     x--; 
     }); 
}); 
    </script> 

    </html> 

这是我的JSON文件,用于测试

[ 
    { 
    "POSID": "104", 
    "Product": "10 Case Header" 
    }, 
    { 
    "POSID": "105", 
    "Product": "10 Case Header" 
    } 
] 

我是一个初学者,感谢所有帮助我能。

回答

0

有几个问题。通过使用var关键字然而

//JavaScript Document 
var globalVariable; 

,则随后声明另一个变量(:

首先,你是在全球范围内,以便从一个功能的数据传输到另一个创建变量globalVariable )呼吁globalVariable$.getJSON()回调函数的范围内,并分配给这个变量options值...不是在全球范围内的变量:

var globalVariable=options; 

您的全球globalVariable从来没有得到任何分配给它的东西。

,虽然代码可以工作,如果$.getJSON()回报速度不够快,$.getJSON()是一个异步功能,这意味着其他代码,就像你$(document).ready()回调将继续执行被调用$.getJSON()后。如果您对http://localhost/test/php/psql.php的请求需要几秒钟才能返回,用户可能已经点击了添加按钮,但您的选项可能尚不可用。

在将点击处理程序绑定到按钮之前,您可能应该等到您的json数据已返回。

这可以在不使用全局变量来完成,也:

  • 将您forms()功能了$(document).ready()
  • 的把逻辑在$.getJSON()回调函数到forms()功能
  • 允许forms()采取参数data
  • 使forms您的$.getJSON()回调函数
  • 摆脱globalVariablelocal和使用options代替

$(document).ready(function jsonload(){ 
    $.getJSON("http://localhost/test/php/psql.php", forms); 
}); 

function forms(data){ 
// Previously in getJSON callback   
    var options = ""; 
    for (var i = 0; i < data.length; i++) 
     { 
      options +="<option value='" + data[i].POSID + "'>" + data[i].Product + "</option>"; 
      //console.log(data[i].POSID + " " + data[i].Product); 
     } 
    // no need for globalVariable/local anymore, just use options 
    //var globalVariable=options 

    // Original Forms function 
    var maxField = 50; //Input fields increment limitation 
    var addButton = $('.add_button'); //Add button selector 
    var wrapper = $('.field_wrapper'); //Input field wrapper 
    var fieldHTML = { 
     row: function optionload(f){ 
      console.log(options); 
      return '<div>Item<input type="text" name="field_name['+f+'][]" value=""/>Material <select name="field_name['+f+'][]"><option value=""></option>' + options + '</select><a href="javascript:void(0);" class="remove_button" title="Remove Field"><i class="material-icons" style="font-size:24px; color:blue">remove_circle</i></a></div>'; 
    }}; 
    var x = 1; //initial field counter is 1 
    $(addButton).click(function(){ //Once add button is clicked 
     if(x < maxField){ 
      x++; 
      $(wrapper).append(fieldHTML.row(x)); //Add field html 
     } 
    }); 
    $(wrapper).on('click', '.remove_button', function(e){ //Once remove button is clicked 
     e.preventDefault(); 
     $(this).parent('div').remove(); //remove field html 
     x--; 
    }); 
}; 
+0

谢谢您的回答切斯特。我对JavaScript非常陌生,非常感谢您的帮助,并对我的代码中的问题进行了解释。 –

+0

当我在我的页面中运行此功能时,我注意到添加按钮不再起作用。感谢您解释我的代码中的错误。 –

0

<!doctype html> 
 
<html> 
 
<head> 
 
<meta charset="UTF-8"> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"> 
 
    </script> 
 
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> 
 
<link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet"> 
 
<title>Form</title> 
 
</head> 
 

 
<body> 
 
<form name="codexworld_frm" id="form1" method="post"> 
 
<div class="field_wrapper"> 
 
<div> 
 
    <h3><a href="javascript:void(0);" class="add_button" title="Add Field">Add POS Item</a> </h3> 
 
</div> 
 
</div> 
 
<input type="submit" value="Submit"> 
 
</form> 
 
</body> 
 
<script type="text/javascript"> 
 
    // JavaScript Document 
 
    var globalVariable; 
 
$(document).ready(function jsonload(data){ 
 
    // $.getJSON("http://localhost/test/php/psql.php", function(data) 
 
      //{ 
 
     var options = ""; 
 
       var data =[ 
 
    { 
 
    "POSID": "104", 
 
    "Product": "10 Case Header" 
 
    }, 
 
    { 
 
    "POSID": "105", 
 
    "Product": "10 Case Header" 
 
    } 
 
]; 
 
     for (var i = 0; i < data.length; i++) 
 
      { 
 
       options +="<option value=\"" + data[i].POSID + "\">" + data[i].Product + "</option>"; 
 
       //console.log(data[i].POSID + " " + data[i].Product); 
 
      } 
 

 
     var globalVariable=options; 
 
     console.log(globalVariable); 
 
    //}); 
 

 
     var maxField = 50; //Input fields increment limitation 
 
     var addButton = $('.add_button'); //Add button selector 
 
     var wrapper = $('.field_wrapper'); //Input field wrapper 
 
     //var fieldHTML = {row :function(f){ 
 
         //return '<h3><div>Item <input type="text" name="field_name['+f+'][]" value=""/>Material <input type="text" name="field_name['+f+'][]" value=""/><a href="javascript:void(0);" class="remove_button" title="Remove Field"><i class="material-icons" style="font-size:24px; color:blue">remove_circle</i></a></div></h3>'; 
 
         //}}; 
 
     var fieldHTML = {row :function optionload(f){ 
 
      var local = globalVariable; 
 
      console.log(local); 
 
      //event.preventDefault(); 
 
         return '<div>Item<input type="text" name="field_name['+f+'][]" value=""/>Material <select name="field_name['+f+'][]"><option value=""></option>' + local + '</select><a href="javascript:void(0);" class="remove_button" title="Remove Field"><i class="material-icons" style="font-size:24px; color:blue">remove_circle</i></a></div>'; 
 
     }}; 
 
     var x = 1; //initial field counter is 1 
 
     $(addButton).click(function(){ //Once add button is clicked 
 
      if(x < maxField){ 
 
       x++; 
 
       $(wrapper).append(fieldHTML.row(x)); //Add field html 
 
      } 
 
      }); 
 
     $(wrapper).on('click', '.remove_button', function(e){ //Once remove button is clicked 
 
         e.preventDefault(); 
 
     $(this).parent('div').remove(); //remove field html 
 
     x--; 
 
     }); 
 
}); 
 
    </script> 
 

 
    </html>

相关问题