jquery动态添加元素无法获取到值

页面
F12查看源码是有append成功的
在这里插入图片描述

问题描述:通过选择【账户】,动态添加【资金】的元素,
并且通过获取【账户】【资金】的值,进行查询。
但是获取的资金元素的值是undefine。

$("select[name='proAccout']", container).change(function () {
        var params = {};
        var proAccout = $(this).val();
        params["proAccout"] = $.trim(proAccout);
        if (params["proAccout"] != "") {
            getAccIDByProAccout(params);
        } else {
            $("div[name='accID']", container).empty().append('<select class="select input" name="accID"></select>');
        }
        var accID = $("select[name='accID']", container).val();
        params["accID"] = accID ? $.trim(accID) : "";     //
        if (params["proAccout"] != "" && params["accID"] != "" ) {
            PRODUCT_CX(params); //查询相关信息
        }
    }).change();
var getaccIDByProAccout= function (params) {
        base_ajaxPost("url", *true*, params, "json",
                function (data, status) {
                    if (data && data.success && parseInt(data.code) > 0) {
                        var result = data.object;
                        //拼接资金select下来菜单
                        var containerDiv = $("div[name='accID']", container).empty();
                        if (result && result.length > 0) {
                            containerDiv.append('<select class="select input" name="accID"></select>');
                            for (var i = 0; i < result.length; i++) {
                                $("select[name='accID']", containerDiv).append('<option value="' + result[i].accID+ '" selected="selected">' + result[i].accountName + '</option>')
                            }
                        } else {
                            containerDiv.append('<select class="select input" name="accID"></select>' + '<div style="display: none;">' + data + '</div>');
                        }
                    } else {
                        $("div[name='accID']", container).empty().append('<select class="select input" name="accID"></select>' + '<div style="display: none;">' + data + '</div>');
                    }
                }, function (text, msg, e) {
                    Alert(msg, null);
                }
        );
    };

解决方案:由于异步请求,请求还没完成,就去获取val(),导致取到的值是undefine,将异步改成同步,则可以解决。

 var getAccIDByProAccout= function (params) {
        base_ajaxPost("url",**false**, params, "json",
                function (data, status) {
                ...
                }
  }
  );              

官方解释
By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false.Cross-domain requests and dataType: “jsonp” requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active.

sync默认是true,即为异步方式, . a j a x 执 行 后 , 会 继 续 执 行 a j a x 后 面 的 脚 本 , 直 到 服 务 器 端 返 回 数 据 后 , 触 发 .ajax执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发 .ajaxajax.ajax里的success方法。若要将其设置为false,则所有的请求均为同步请求,在没有返回值之前,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。https://api.jquery.com/jQuery.ajax/
在这里插入图片描述

总结:
使用同步和异步的场景

异步:在异步模式下,当我们使用AJAX发送完请求后,可能还有代码需要执行。这个时候可能由于种种原因导致服务器还没有响应我们的请求,但是因为我们采用了异步执行方式,所有包含AJAX请求代码的函数中的剩余代码将继续执行。如果我们是将请求结果交由另外一个JS函数去处理的,那么,这个时候就好比两条线程同时执行一样。

同步:在同步模式下,当我们使用AJAX发送完请求后,后续还有代码需要执行,我们同样将服务器响应交由另一个JS函数去处理,**但是这时的代码执行情况是:在服务器没有响应或者处理响应结果的JS函数还没有处理完成return时,包含请求代码的函数的剩余代码是不能够执行的。**就好比单线程一样,请求发出后就进入阻塞状态,知道接触阻塞余下的代码才会继续执行。

什么时候用用同步模式呢?当你向服务器获取数据,需要等待数据返回后再继续其他代码时,这时候就可以同步模式。
在实际开发项目中,如要获取下拉数据后并要显示用户之前选择的选项,这时候就需要先获取下拉选项后再选择用户选择的选项,有一个先后顺序,则必须选择用同步模式。
这里,下拉账户后,通过账户获取资金的值,需选择同步模式。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值