0

基于此处的其他几个线程,我认为我正在寻找的是 json_encode(),尽管我并不真正了解我的 JavaScript 函数如何使用输出。我想要做的是允许用户根据需要添加额外的选择列表,并从我用来创建初始选择列表的 PHP 函数中填充这些选择选项。这是我目前的JavaScript:

<script type="text/javascript">
var assigneeCounter = <?php print checkdata("assignee_count", $formvalues, "1"); ?>;

function addInput(fieldlabel, inputclasses, inputCounter, fieldtype = 'input', selectoptions = false){
  window[inputCounter]++;
  var cleanlabel = fieldlabel.replace(/[^a-zA-Z 0-9]+/g,'');
  var cleanlabel = cleanlabel.replace(/\s+/g, '_').toLowerCase();
  var newdiv = document.createElement('div');
  newdiv.id = cleanlabel + window[inputCounter];
  if (fieldtype == 'input') {
    newdiv.innerHTML = '<div class="form-item"><label for="' + cleanlabel + '_' + window[inputCounter] + '">' + fieldlabel + ' #' + window[inputCounter] + '</label><input type="text" name="' + cleanlabel + '_' + window[inputCounter] + '" id="' + cleanlabel + '_' + window[inputCounter] + '" value="" class="' + inputclasses + '"><span class="space"><a href="javascript:removeInput(\'' + cleanlabel + '\',\'' + inputCounter + '\',\'' + window[inputCounter] + '\');">Remove</a></span>';
  }
  else if (fieldtype == 'select') {
    alert(selectoptions);
    newdiv.innerHTML = '<div class="form-item"><label for="' + cleanlabel + '_' + window[inputCounter] + '">' + fieldlabel + ' #' + window[inputCounter] + '</label><select name="' + cleanlabel + '_' + window[inputCounter] + '" id="' + cleanlabel + '_' + window[inputCounter] + '" class="' + inputclasses + '">
      <span class="space"><a href="javascript:removeInput(\'' + cleanlabel + '\',\'' + inputCounter + '\',\'' + window[inputCounter] + '\');">Remove</a></span>';
  }
  document.getElementById(cleanlabel + "_additions").appendChild(newdiv);
  document.getElementById(cleanlabel + "_count").value = window[inputCounter];
}
function removeInput(fieldlabel, inputCounter, fieldID){
  var element = document.getElementById(fieldlabel + fieldID);
  document.getElementById(fieldlabel + "_additions").removeChild(element);
  window[inputCounter]--;
  document.getElementById(fieldlabel + "_count").value = window[inputCounter];
}
</script>

我在 HTML 中调用函数,如下所示:

<div id="assignee_additions"></div>
<p><a href="javascript:addInput('Assignee','required-text', 'assigneeCounter', 'select', '<?php print json_encode($assignto); ?>');">Add Another Assignee</a></p>

当我将“fieldtype”的值设置为输入时,它工作得很好,并按预期创建了另一个输入字段。删除功能也可以完成它的工作。但我真正需要的是一个选择字段,而不是一个输入字段,这就是我缺乏 JavaScript 知识的原因。

此外,如果有人认为 jQuery 在这里是一个更好的选择,我当然也对此持开放态度,但我不知道这比传统的 JavaScript 更好。

提前致谢!

4

1 回答 1

1

您可以JSON在不同的php文件中创建您的。然后,从您的javascript函数中,您可以使用AJAX调用来检索生成的JSON.

我相信您想要标签的json_encode值和键,对吗?<option>因此,在成功AJAX调用后,解码您的JSON并为每个值构建一个新选项。

jQuery 中的粗略代码如下所示:

$.ajax({
    url: 'giveMeJSON.php',
    dataType: 'json',
    success: function(data){
        $.each(data.options, function(index){
            $('<option>').val($(this).value).text($(this).text).appendTo($('#select_id'));
        }
    }
})

阅读$.ajaxAJAX

于 2012-09-20T15:53:15.793 回答