aws-select2+radio

博客提到select2的元素属性是对象,需用选择器操作,使用document.getElementById(“selectSearch”).value只能取到第一个值,还提及了异步传输和radio相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 固定值
<select id="selectSearch"></select>
$(document).ready(function() {
    var opt = {
		width : 300,
		data : [
			{id:"lb",text:"刘备"},
			{id:"gy",text:"关羽"},
			{id:"zf",text:"张飞"},
			{id:"cc",text:"曹操"}
		]
	};
	$("#selectSearch").select2(opt);
});

//赋值
$("#selectSearch").val(["gy"]).trigger("change"); //单选
$("#selectSearch").val(["gy","zf"]).trigger("change"); //多选
//取值
 [window.]$("#selectSearch").val());

这里注意
select2的元素属性是一个对象,需要用选择器进行操作。
document.getElementById(“selectSearch”).value 只能取到第一个值

  1. 异步传输
<select id="selectSearch"></select>
//异步加载下拉列表
var checkMode = {
    width: "100%",
    allowClear: true,
    multiple:true,
    closeOnSelect:false,
    ajax: {
        url: "./jd",
        dataType: 'json',
        data: function () { 
            return {
                sid: "<#sid>",
                cmd:"com.awspaas.user.apps.********"
            };
        },
        processResults: function (data) { 
            return {
                results: data["checkMode"]
            };
        },
        cache: true
    }
};
$("#checkMode").select2(checkMode);
//!!!ajax不推荐!!!!
//直接<select><#data><select/>更方便

//多选赋值
var checkModeArr = checkMode.split(",");
$("#checkMode").val(checkModeArr).trigger("change");
//取值
 [window.]$("#selectSearch").val());
  window.$("#checkMode").val().toString();
  1. radio
//取值
var cheitTypeCode = window.$('input[name="cheitType"]:checked').val();
//赋值
$("input[name='cheitType'][value='<#cheitType>']").check("check");
//注意attr不行!不知道为啥
<think>我们遇到了AWSSDK的链接错误,主要是由于静态库的链接顺序不正确。链接器在解析依赖时是从左到右的,所以需要将基础库放在右边(依赖它们的库放在左边)。根据AWSSDK的依赖关系,我们应该按照从高层到底层的顺序链接,即:依赖于其他库的库应该放在被依赖库的前面(左边)。根据AWSSDK的依赖关系,正确的链接顺序应该是:1.高层库(如`aws-cpp-sdk-core`)需要依赖底层的库(如`aws-c-common`等),所以高层库应该放在左边,底层库放在右边。但是,实际上链接器的规则是:如果库A依赖库B,那么库A应该出现在库B的左边(即先出现库A,再出现库B)。因为链接器在扫描库列表时,遇到未定义的符号,会到后面的库中去寻找。因此,正确的顺序应该是:从最顶层的应用库(如`aws-cpp-sdk-s3`)开始,然后到`aws-cpp-sdk-core`,再到底层的C库(如`aws-c-s3`,`aws-c-auth`等),最后是系统库。根据AWS官方文档和实际经验,推荐的链接顺序是(从高到低):-aws-cpp-sdk-s3-aws-cpp-sdk-core-aws-c-s3-aws-crt-cpp-aws-c-auth-aws-c-http-aws-c-io-aws-c-compression-aws-c-cal-s2n-aws-checksums-aws-c-common另外,还需要链接系统库,如OpenSSL(-lcrypto-lssl)、libcurl(-lcurl)、zlib(-lz)和线程库(-lpthread)等。但是,请注意,你给出的库列表中包含了一些我们可能没有直接使用的库(如`aws-c-sdkutils`、`aws-c-event-stream`、`aws-c-mqtt`),这些库可能需要根据实际使用的服务来链接。对于S3服务,我们主要需要`s3`相关的库。因此,调整链接顺序如下(按照从高层到底层,即链接顺序从左到右):1.`aws-cpp-sdk-s3`(最高层,依赖于core和aws-c-s3等)2.`aws-cpp-sdk-core`3.`aws-c-s3`4.`aws-crt-cpp`5.`aws-c-auth`6.`aws-c-http`7.`aws-c-io`8.`aws-c-compression`9.`aws-c-cal`10.`s2n`11.`aws-checksums`12.`aws-c-common`然后,再链接系统库(如`-lcurl-lcrypto-lssl-lz-lpthread`)。在CMake中,我们可以通过`target_link_libraries`按顺序添加这些库。如果你使用的是Makefile,则需要在链接命令中按照上述顺序排列。示例(CMake):```cmaketarget_link_libraries(your_targetaws-cpp-sdk-s3aws-cpp-sdk-coreaws-c-s3aws-crt-cppaws-c-authaws-c-httpaws-c-ioaws-c-compressionaws-c-cals2naws-checksumsaws-c-common${CMAKE_THREAD_LIBS_INIT}#或者直接写-lpthreadcurlsslcryptoz)```注意:上述顺序中,`aws-cpp-sdk-core`和`aws-c-s3`的顺序可能需要调整。实际上,`aws-cpp-sdk-s3`可能依赖于`aws-cpp-sdk-core`,所以`aws-cpp-sdk-core`应该在`aws-cpp-sdk-s3`的右边(即后面)。但是根据链接器的规则,被依赖的库应该放在后面。所以,如果A依赖B,那么A在左,B在右。因此:`aws-cpp-sdk-s3`依赖`aws-cpp-sdk-core`,所以顺序是:先`aws-cpp-sdk-s3`,然后`aws-cpp-sdk-core`。然而,实际上`aws-cpp-sdk-core`是一个基础库,很多库都依赖它,所以它应该出现在较左边的位置?这里需要澄清:在链接顺序中,如果一个库被多个库依赖,它应该出现在依赖它的所有库的后面(即更靠右)。所以,对于同时链接多个库的情况,我们应该按照依赖关系的拓扑顺序,从依赖链的顶端(叶子节点)到底部(根节点)排列。例如:A依赖B,B依赖C。那么链接顺序应该是:ABC因此,对于AWSSDK,我们可以按照以下规则排列:1.将最顶层的服务库(如s3)放在最左边。2.然后是核心库(core)。3.接着是底层的C库(如auth,http,io等)。但是,由于依赖关系比较复杂,有时候可能需要调整。我们可以使用工具(如CMake)自动处理依赖关系,或者使用链接器的`--start-group`和`--end-group`选项来循环解析依赖。如果使用gcc链接器,可以这样:```bashg++...-Wl,--start-group-laws-cpp-sdk-s3-laws-cpp-sdk-core-laws-c-s3-laws-crt-cpp-laws-c-auth-laws-c-http-laws-c-io-laws-c-compression-laws-c-cal-ls2n-laws-checksums-laws-c-common-Wl,--end-group-lcurl-lcrypto-lssl-lz-lpthread```使用`--start-group`和`--end-group`可以让链接器重复扫描组内的库,直到所有符号都被解析,这样就不需要严格排序了。但是,这可能会增加链接时间。所以,推荐的方法是先尝试正确的顺序,如果顺序很难确定,再使用分组。根据你的错误信息,主要是缺少`aws-crt-cpp`中的符号,所以请确保`aws-crt-cpp`库被链接,并且位置在`aws-cpp-sdk-core`之后(即更靠右)。总结步骤:1.按照上述推荐的顺序调整库的链接顺序。2.确保所有必要的系统库(OpenSSL,libcurl,zlib,pthread)都已链接。3.如果调整顺序仍然不能解决,尝试使用`--start-group`和`--end-group`。另外,请注意,如果使用静态库,确保这些库是用兼容的选项编译的(如相同的ABI,相同的编译选项等)。希望这些信息能帮助你解决链接问题。</think>为了解决 AWS SDK 的链接顺序问题,以下是正确的库链接顺序和解决方案: ### 正确的 AWS 库链接顺序 根据 AWS SDK 的依赖关系,链接顺序应**从底层依赖到高层服务**,按以下顺序排列: ```mermaid graph BT A[aws-c-common] --> B[aws-checksums] B --> C[s2n] C --> D[aws-c-cal] D --> E[aws-c-compression] E --> F[aws-c-io] F --> G[aws-c-http] G --> H[aws-c-auth] H --> I[aws-c-sdkutils] I --> J[aws-c-event-stream] J --> K[aws-c-mqtt] K --> L[aws-c-s3] L --> M[aws-crt-cpp] M --> N[aws-cpp-sdk-core] N --> O[aws-cpp-sdk-s3] ``` ### 解决方案 #### 1. 命令行链接顺序(GCC/Clang) ```bash g++ your_app.cpp \ -laws-cpp-sdk-s3 \ -laws-cpp-sdk-core \ -laws-crt-cpp \ -laws-c-s3 \ -laws-c-mqtt \ -laws-c-event-stream \ -laws-c-sdkutils \ -laws-c-auth \ -laws-c-http \ -laws-c-io \ -laws-c-compression \ -laws-c-cal \ -ls2n \ -laws-checksums \ -laws-c-common \ -lcurl -lssl -lcrypto -lz -lpthread ``` #### 2. CMake 配置(推荐) ```cmake # 在 CMakeLists.txt 中添加 target_link_libraries(your_target PRIVATE aws-cpp-sdk-s3 aws-cpp-sdk-core aws-crt-cpp aws-c-s3 aws-c-mqtt aws-c-event-stream aws-c-sdkutils aws-c-auth aws-c-http aws-c-io aws-c-compression aws-c-cal s2n aws-checksums aws-c-common ${CMAKE_THREAD_LIBS_INIT} # pthread ${OPENSSL_CRYPTO_LIBRARY} # -lcrypto ${OPENSSL_SSL_LIBRARY} # -lssl CURL::libcurl # -lcurl ZLIB::ZLIB # -lz ) ``` ### 关键原则 1. **依赖方向**:$$ \text{高层服务} \rightarrow \text{核心库} \rightarrow \text{底层基础库} $$ - 服务层(如 s3)在最前 - 基础库(如 aws-c-common)在最后 2. **符号解析规则**: - 链接器从左向右解析未定义符号 - 被依赖的库必须出现在依赖它的库的右边 - 错误示例:`aws-cpp-sdk-core` 在 `aws-c-common` 左边会导致未定义符号 3. **系统库顺序**: ```mermaid graph LR OpenSSL[OpenSSL] -->|依赖| zlib[zlib] libcurl -->|依赖| OpenSSL AWS基础库 -->|依赖| libcurl ``` 系统库顺序:`-lcurl -lssl -lcrypto -lz` ### 验证方法 1. 检查符号依赖: ```bash nm -u libaws-cpp-sdk-core.a | grep 'U aws_' ``` 2. 确认符号在后续库中定义: ```bash nm -gC libaws-c-common.a | grep 'aws_byte_cursor' ``` ### 错误原因分析 您的错误 `undefined reference to Aws::Crt::ByteCursorFromArray` 表明: 1. `libaws-cpp-sdk-core.a` 需要 `aws-crt-cpp` 的符号 2. 但 `aws-crt-cpp` 出现在链接顺序的后面 3. 解决方案:将 `aws-crt-cpp` 移到 `aws-cpp-sdk-core` 之后 > 参考 AWS 官方构建指南:[AWS C++ SDK 构建文档](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/setup.html)[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值