如何在Ajax上放置Onchange返回html选择

时间:2017-03-01 10:55:51

标签: javascript php jquery html ajax

我在我的表单上的ajax返回的html上放置Onchange()时遇到了问题。

基本上我在select中列出了客户。

<select name="company" id="company">                                                            
   <?php 
       $sqlget1 = "SELECT * FROM clients WHERE 1=1 ORDER BY company ASC;";
       $resget1 = mysql_query($sqlget1);
       while($row1 = mysql_fetch_array($resget1)) {                                                            
   ?>                                                            
       <option value="<?php echo $row1['id']; ?>"><?php echo $row1['company']; ?></option>                                                                                                                        
   <?php
       }
   ?>
</select>

当有人选择客户端时,我使用Ajax来获取分配给该客户端的项目。

$('#company').change(function() {                        
    var selectedProject = $("#company option:selected").val();
    $.ajax({
        type: "POST",
        url: "get_projects.php",
        data: { projects : selectedProject } 
    }).done(function(data){
        $("#response").html(data);
    });
});

它会返回

<div id="response"></div>

get_projects.php的代码是

<?php
include('inc.php');
if(isset($_POST["projects"])) {      
    $projects = $_POST["projects"];    
    $sqlget2 = "SELECT * FROM projects WHERE cid=\"$projects\" ORDER BY pname ASC;";        
    $resget2 = mysql_query($sqlget2);
    echo '<select name="project" id="project" class="select2 form-control">';
    echo '<option value="">-- Select a project --</option>';
    while($row2 = mysql_fetch_array($resget2)) {                                                            
?>                                                            
       <option value="<?php echo $row2['id']; ?>" pstatus="<?php echo $row2['pstatus']; ?>" ptype="<?php echo $row2['ptype']; ?>"><?php echo $row2['pname']; ?></option>                                                                                                                        
<?php
    }
    echo '</select>';
 }
?>

现在,当我在ajax返回的html上使用更改功能时,它无效。

我试图查看源代码并发现它不存在。它只显示<div id="response"></div>

但我可以在表单上看到结果,但无法在源代码中看到源代码。

因此我认为这就是为什么Onchange()不适用于<select name="project" id="project" class="select2 form-control">,因为它没有显示。

6 个答案:

答案 0 :(得分:0)

当你使用ajax时,你稍后会在DOM(浏览器视图)中添加一段html,因为你使用.change,onchange只会被添加到浏览器中已存在的'#company'元素中。

添加html后需要绑定onchange。例如:

test[0]["value"] = false

OR

您还可以使用on change,on change确实可以使用稍后添加到dom的元素。所以这段代码适用于已经存在的元素和新添加的元素,例如ajax

$('#company').change(function() {        
    onCompanyChange()                
});

function onCompanyChange(){
    var selectedProject = $("#company option:selected").val();
    $.ajax({
        type: "POST",
        url: "get_projects.php",
        data: { projects : selectedProject } 
    }).done(function(data){
        $("#response").html(data);
        $('#company').change(function() {        
            onCompanyChange()                
        });
    });
}

答案 1 :(得分:0)

我看到,从Ajax返回的数据是对象
您应该解析它以将原始内容设置为DIV

答案 2 :(得分:0)

当您动态添加标记到页面时,javascript不知道您通过php添加的控件。

尝试像这样找到新添加的控件:

var select = document.getElementById('project');

然后你应该可以解雇你的改变方法

答案 3 :(得分:0)

未经测试,但应该可以使用

<?php
include('inc.php');
if(isset($_POST["projects"]))
{
$projects = $_POST["projects"];    
$varOut = "";
$sqlget2 = "SELECT * FROM projects WHERE cid=\"$projects\" ORDER BY pname ASC;";        
$resget2 = mysql_query($sqlget2);
$varOut .= '<select name="project" id="project" class="select2 form-control">';
$varOut.= '<option value="">-- Select a project --</option>';
while($row2 = mysql_fetch_array($resget2))
{                                                            
    $varOut.= "<option value=" . $row2['id'] . " pstatus=". $row2['pstatus']. ">ptype=".$row2['ptype']."><".$row2['pname']."></option>";                                                                                                                       
}
$varOut.= '</select>';
}
echo $varOut;
?>

答案 4 :(得分:0)

我终于解决了这个问题。

Basicall我刚刚粘贴了#c;#projects&#39;的Onclick()脚本。在 get_projects.php 文件中。

所以现在每当它来自ajax时它也会带来javascript。

答案 5 :(得分:-1)

尝试以下代码。希望这很好。

$(document).ready(function() {
    $(document).on('change', '#company', function() {
        var selectedProject = $("#company option:selected").val();
        $.ajax({
            type: "POST",
            url: "get_projects.php",
            data: { projects : selectedProject } 
        }).done(function(data){
        $("#response").html(data);
        });
    });
});