在Javascript上调用PHP函数Onchange

在Javascript上调用PHP函数Onchange,javascript,php,jquery,html,Javascript,Php,Jquery,Html,我想调用php中的一个函数onchange在html的select中,这是如何做到的 html代码 <div class="col-sm-4 form-group"> <label for="c_city">City</label> <select class="form-control" id="c_city" onchange="<?php getArea(); ?>"> <option value

我想调用php中的一个函数onchange在html的select中,这是如何做到的

html代码

<div class="col-sm-4 form-group">
   <label for="c_city">City</label>
   <select class="form-control" id="c_city" onchange="<?php getArea(); ?>">
        <option value="">Select City Name</option>
        <!--populate value using php-->
        <?php
            $stmt ="SELECT * FROM Cities";
            foreach ($con->query($stmt) as $row) {
         ?>
         <option value="<?php echo $row['City_ID'];?>"><?php echo $row['City_Name'];?></option>
         <?php
          }
         ?>
   </select>
</div>

这样做不行,你需要这样做。你的想法行不通,因为onchange是javascript的保留函数,而不是php的。如果您执行代码,当select更改时,only将在javascript中运行您的getArea echo,结果没有看到您期望的结果。我在这里做的是将一个js函数和一个ajax调用放在php代码中,帮助您按照自己的意愿检索区域。很明显,就像我下面的评论一样,将绑定放入html代码不是一个好方法,因为当代码开始增长时,维护变得非常昂贵-为了解决这个问题,我使用了将一些侦听器绑定到对象的方法,但您也可以使用

但是,如果您真的需要javascript,那么分析它是很重要的。如果按照代码建议只获取一个值,那么提交的表单就更简单

<div class="col-sm-4 form-group">
   <label for="c_city">City</label>
   <select class="form-control" id="c_city" onchange="getArea()"> //onchange is not a good practice in the html
        <option value="">Select City Name</option>
        <!--populate value using php-->
        <?php
            $stmt ="SELECT * FROM Cities";
            foreach ($con->query($stmt) as $row) {
         ?>
         <option value="<?php echo $row['City_ID'];?>"><?php echo $row['City_Name'];?></option>
         <?php
          }
         ?>
   </select>
</div>

<script>
   //that way with onchange in HTML
   function getArea(){
   var city = $('#c_city option:selected').val();
   $.get( "yourphpcode.php?action=getArea&c_city=" + city, function( data ) {

  alert( data );
});
   }
  //or THAT WAY
  $('#c_city').on('change', function(){
         var city = $(this).find('option:selected').val();
   $.get( "yourphpcode.php?action=getArea&c_city=" + city, function( data ) {

  alert( data );
});

   });
</script>


   //yourphpcode.php
    function getArea() 
{
    if(isset($_GET['c_city'])) 
    {
        $c_city = $_GET['c_city'];
        echo json_encode($c_city);
    }
}
    if (isset($_GET['action']) && $_GET['action'] == 'getArea'){
           getArea();
    }

您可以尝试使用ajax调用php脚本并将结果返回到javascript

例如,在html页面中:

<div class="col-sm-4 form-group">
   <label for="c_city">City</label>
   <select class="form-control" id="c_city" onchange="getArea()">
        <option value="">Select City Name</option>
        <!--populate value using php-->
        <?php
            $stmt ="SELECT * FROM Cities";
            foreach ($con->query($stmt) as $row) {
         ?>
         <option value="<?php echo $row['City_ID'];?>"><?php echo $row['City_Name'];?></option>
         <?php
          }
         ?>
   </select>
</div>

<script>
 function getArea(){
  var c_city = $('#c_city').val();
   $.ajax({
           type: 'POST',
           url: "get_area.php",
           data: {c_city:c_city},
           success: function(result){
               //do something here with return value like alert
               alert(result)
           }
     })
}
</script>

让我知道它是否有帮助,或者如果您发现问题,请使用jquery ajax此处您不能这样做,PHP在服务器端、JS客户端执行,因此您的JS需要向您的服务器发送请求,服务器调用函数并将答案返回给您的JS,ajax是您的朋友,如果使用jqueryFirst,您可能需要了解服务器端和客户端的区别:做还是不做。没有尝试。一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。我有两个combo boxesCity&Area的注册表格,他们从数据库中读取,他们相互依赖,当选择一个特定的城市时,另一个组合框中会充满它的所有区域,“我的代码行吗?”还是有更好的方法?@NewDeveloper,可以。如果数据来自php或mysql数据库,则需要ajax来填充第二个组合框
<div class="col-sm-4 form-group">
   <label for="c_city">City</label>
   <select class="form-control" id="c_city" onchange="getArea()">
        <option value="">Select City Name</option>
        <!--populate value using php-->
        <?php
            $stmt ="SELECT * FROM Cities";
            foreach ($con->query($stmt) as $row) {
         ?>
         <option value="<?php echo $row['City_ID'];?>"><?php echo $row['City_Name'];?></option>
         <?php
          }
         ?>
   </select>
</div>

<script>
 function getArea(){
  var c_city = $('#c_city').val();
   $.ajax({
           type: 'POST',
           url: "get_area.php",
           data: {c_city:c_city},
           success: function(result){
               //do something here with return value like alert
               alert(result)
           }
     })
}
</script>
if(isset($_POST['c_city'])) 
    {
        $c_city = $_POST['c_city'];
        echo $c_city;
    }