Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从第一个选择列表填充第二个选择列表并更改操作属性_Javascript_Php_Jquery_Arrays_Drop Down Menu - Fatal编程技术网

Javascript 从第一个选择列表填充第二个选择列表并更改操作属性

Javascript 从第一个选择列表填充第二个选择列表并更改操作属性,javascript,php,jquery,arrays,drop-down-menu,Javascript,Php,Jquery,Arrays,Drop Down Menu,我有一个PHP数组,用于填充第一个选择下拉列表,以便用户可以选择职业。选择职业后,第二个下拉列表将使用JavaScript函数加载该职业的职位 然后,我使用jQuery根据第二个下拉列表的值更改表单的action attr。但它返回null,因为正在通过JavaScript加载。如果我在选择框中硬编码,那么它就工作了 作为一个注释。我没有使用数据库。我使用一个php数组来保存两个下拉列表的数据。该数组已经作为包含在php页面顶部加载到页面上 这里有三个问题 首先-如何使用action attr解

我有一个PHP数组,用于填充第一个选择下拉列表,以便用户可以选择职业。选择职业后,第二个下拉列表将使用JavaScript函数加载该职业的职位

然后,我使用jQuery根据第二个下拉列表的值更改表单的action attr。但它返回null,因为正在通过JavaScript加载。如果我在选择框中硬编码,那么它就工作了

作为一个注释。我没有使用数据库。我使用一个php数组来保存两个下拉列表的数据。该数组已经作为包含在php页面顶部加载到页面上

这里有三个问题

首先-如何使用action attr解决问题

第二,有没有一种方法可以更好地填充第二个下拉列表

第三,如果是ajax,那么既然数组已经加载到php页面中,那么它如何在不再次从服务器中提取php数组数据的情况下获取php数组数据呢

这是我的代码安排

PHP数组

Select和foreach循环

关于第一个问题,即如何动态设置表单操作,下面是一个测试代码:


然后使用JS来处理更改事件。

我看不出这是如何解决表单的action attr问题的?jSON仍然在做与JavaSCript相同的事情,JavaSCript动态填充select选项。因此,无论我使用JS还是JSON,表单的action attr仍然会基于第二个选中选项的值获得一个空值。对象是获取第二个下拉列表的值,以填充表单的action attr。与我已有的相比,JSON在这方面有什么帮助?谢谢。您将如何编写JS来处理on change事件?正如我前面提到的,这里有一个非常好的示例:。这个url已经有了解决方案:谢谢,我已经回到了您的第一个JSFIDLE示例。无法完全使用他在示例底部使用的jquery。我来看看另一个问题。
$pages = array(

// Engineer
'Engineer' => array('pageTitle' => 'Engineer', 'subpages' => array(
    'Software Engineer' => 'Software',
    'Embedded Software Engineer' => 'Embedded Software',)),

// Analyst
'Analyst' => array('pageTitle' => 'Analyst', 'subpages' => array(
    'Systems-Analyst' => 'Systems',
    'Data-Analyst' => 'Data',))
);
echo '<form method="POST" action="?position=" id="menuform">
<select name="occupation" id="occupation">
<optgroup label="Select Occupation">
<option value="" selected disabled>Select Occupation</option>';
foreach ($pages as $filename => $value) {
    echo '
    <option value="'.$filename.'"'.((strpos($position, $filename) !== false) ? ' selected' : '').'>'.$filename.'</option>';
} // foreach pages


echo '
</optgroup>
</select>

<select name="position" id="position" onchange="this.form.submit()">

</select>
</form>
';
<script type="text/javascript">
var occupation = document.getElementById("occupation");
var position = document.getElementById("position");
onchange(); //Change options after page load
occupation.onchange = onchange; // change options when occupation is changed

function onchange() {
    <?php foreach ($pages as $filename => $value) {?>
        if (occupation.value == '<?php echo $filename; ?>') {
            option_html = "\n<? echo'<option selected disabled>Select Position</option>'; ?>\n";
            <?php if (isset($value ['subpages'])) { ?>
                <?php foreach ($value ['subpages'] as $subfilename => $subpageTitle) { ?>
                    option_html += "<? echo '<option value=\''.urlencode($subfilename).'\''.(($position == $subfilename) ? ' selected' : '').'>'.$subpageTitle.' '.$filename.'</option>'; ?>\n";
                <?php } ?>
            <?php } ?>
            position.innerHTML = option_html;
        }
    <?php } ?>
}
</script>
$('#menuform').attr('action',$('#menuform').attr('action')+$('#position').val());
<?php

$pages = array(
  'Engineer' => array(
    'pageTitle' => 'Engineer',
    'subpages' => array(
      'Software Engineer' => 'Software',
      'Embedded Software Engineer' => 'Embedded Software',
    )
  ),
  'Analyst' => array(
    'pageTitle' => 'Analyst',
    'subpages' => array(
      'Systems-Analyst' => 'Systems',
      'Data-Analyst' => 'Data',
    )
  )
);
?>

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h4 id="form-action-shower">Form action: <span></span></h4>

<form method="POST" action="?position=" id="menuform">
  <select name="occupation" id="occupation">
    <optgroup label="Select Occupation">
      <option value="" selected disabled>Select Occupation</option><br />

      <?php foreach($pages as $occupation => $occData): ?>
        <option value="<?php echo $occupation ?>"><?php echo $occupation ?></option>
      <?php endforeach ?>
    </optgroup>
  </select>

  <select name="position" id="position">
    <optgroup label="Select Position">
      <option value="" selected disabled>Select Position</option><br />

      <?php foreach($pages as $occupation => $occData): ?>
        <?php foreach($occData['subpages'] as $key => $value): ?>
          <option value="<?php echo $key ?>"><?php echo $value ?></option>
        <?php endforeach ?>
      <?php endforeach ?>
    </optgroup>
  </select>

  <input type="submit" value="Click here to test form action">
</form>

<script>
  $('#position').change(function() {
    var form_action = '?position=' + $(this).val();
    $('#menuform').attr('action', form_action);
    $('#form-action-shower span').html(form_action);
  });
</script>
<?php
$pages = array(
  'Engineer' => array('pageTitle' => 'Engineer', 'subpages' => array(
    'Software Engineer' => 'Software',
    'Embedded Software Engineer' => 'Embedded Software',)
  ),
  'Analyst' => array('pageTitle' => 'Analyst', 'subpages' => array(
    'Systems-Analyst' => 'Systems',
    'Data-Analyst' => 'Data',)
  )
);

$json_pages = json_encode($pages);

echo "<script>var pages = $json_pages;</script>";
var pages = {
    "Engineer": {
        "pageTitle": "Engineer",
        "subpages": {
            "Software Engineer": "Software",
            "Embedded Software Engineer": "Embedded Software"
        }
    },
    "Analyst": {
        "pageTitle": "Analyst",
        "subpages": {
            "Systems-Analyst": "Systems",
            "Data-Analyst": "Data"
        }
    }
}