2017-01-06 65 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>

相關問題