Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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 我无法通过Ajax创建的选择元素设置值或获取值_Javascript_Jquery_Ajax_Setvalue - Fatal编程技术网

Javascript 我无法通过Ajax创建的选择元素设置值或获取值

Javascript 我无法通过Ajax创建的选择元素设置值或获取值,javascript,jquery,ajax,setvalue,Javascript,Jquery,Ajax,Setvalue,我创建了omarkasec作为一个函数,通过ajax从数据库中获取汽车品牌,并通过ajax->success在选择元素中添加了该汽车品牌作为选项。 但是我不能设置这个select元素的值 我尝试了设置值的代码: $'select[name=marka]'.val'Lada'; $'select[name=marka]option[value=Lada]'。prop'selected',true; $'select[name=marka]option[value=Lada]'。attr'selec

我创建了omarkasec作为一个函数,通过ajax从数据库中获取汽车品牌,并通过ajax->success在选择元素中添加了该汽车品牌作为选项。 但是我不能设置这个select元素的值

我尝试了设置值的代码:

$'select[name=marka]'.val'Lada'; $'select[name=marka]option[value=Lada]'。prop'selected',true; $'select[name=marka]option[value=Lada]'。attr'selected','selected'; 这个密码不起作用。但如果我加上警觉;在omarkasec功能中,代码起作用,如果我删除警报;代码不起作用

<div id="marka" class="gizle" >
   Marka: <br>
   <select name="marka" onchange="omodelsec()" size="10" ></select>
</div>

<script language='javascript' type='text/javascript'>
    function omarkasec() {
        $.ajax({
            type: "POST",
            url: "aracsor.php",
            dataType: "json",
            data: {
                otomobilmodelyili : $("select[name=modelyili]").val(), //This work, because i created php.
            },
            success: function(donen){
                $("#marka").removeClass("gizle");
                $("#model").addClass("gizle");
                $("#yakit").addClass("gizle");
                $("#sanziman").addClass("gizle");
                $("#cekis").addClass("gizle");
                $("#kasatipi").addClass("gizle");
                $("select[name=marka]").empty();
                $.each(donen, function (index, otomarka) {
                    $("select[name=marka]").append($("<option>", {
                        text : otomarka,
                        value  : otomarka,
                    }));
                });
            },
        });
     //if I add here alert(""); The following code works.
    }
    </script>

<script language='javascript' type='text/javascript'>
   omarkasec();
   $('select[name=marka]').val('Lada');
   alert($('select[name=marka]').val()); //if I add alert(""); this code work but if I remove alert(""); this code get null value.
</script>

你有比赛条件。您正在调用omarkasec,而不是等待它完成以执行select.val操作。当您添加警报时,它会起作用,因为它为代码提供了一些额外的时间来完成ajax调用并填充值。当您向其发出警报时,值已填充


所有依赖于ajax调用结果的代码都必须在成功回调中。

ajax调用是异步的。您的代码执行$.ajax调用,并将回调函数传递给它,但此时不会执行该回调函数

执行立即在$.ajax之后继续执行语句,但此时内容尚未加载

但是,如果执行警报,则在警报对话框打开时可能最终触发回调,因此内容由回调函数加载。如果随后关闭弹出窗口,随后的任何代码都会发现内容在那里

解决这个问题的一种方法是使用$.ajax调用的返回值,这是一个承诺,然后链接一个调用:

function omarkasec(oncomplete) {
    return $.ajax({
//  ^^^^^^
        type: "POST",
        url: "aracsor.php",
        dataType: "json",
        data: {
            otomobilmodelyili : $("select[name=modelyili]").val(),
        },
        success: function(donen){
            $("#marka").removeClass("gizle");
            $("#model").addClass("gizle");
            $("#yakit").addClass("gizle");
            $("#sanziman").addClass("gizle");
            $("#cekis").addClass("gizle");
            $("#kasatipi").addClass("gizle");
            $("select[name=marka]").empty();
            $.each(donen, function (index, otomarka) {
                $("select[name=marka]").append($("<option>", {
                    text : otomarka,
                    value  : otomarka,
                }));
            });
        },
    });
}

// provide (anonymous) callback function to the `then` method: 
omarkasec.then(function () {
     // this code will only be executed when content is loaded:
     $('select[name=marka]').val('Lada');
     alert($('select[name=marka]').val());
});

尝试将代码放在$document.readyfunction{//put code here}之间;您需要等待DoucMont加载,然后才能找到元素并设置值这是一个竞争条件-我最近发布了一个类似的问题。也许这里的简化示例可以清楚地说明竞争条件?谢谢诺德曼和特林科特。以下代码解决了我的问题。OMARKASEC函数{//仅当加载内容时才会执行此代码:$'select[name=marka]'.val'Lada';alert$'select[name=marka]'.val;};你的回答救了我一天。谢谢