function CheckNull(strElem,strName) { if(document.getElementById(strElem).value == "") { window.alert(strName + " 为必填项"); document.getElementById(strElem).focus(); return false; } return true; }
这段代码是一个JavaScript函数 CheckNull
,用于检查指定元素的值是否为空。如果元素的值为空,它会显示一个警告框,并将焦点返回到该元素上。如果元素的值不为空,则返回 true
。
函数接受两个参数:
strElem
:一个字符串,表示要检查的元素的ID。strName
:一个字符串,表示要显示在警告框中的字段名称或描述。
代码逻辑如下:
- 通过
document.getElementById(strElem)
获取指定ID的元素。 - 判断该元素的值是否为空,使用
.value
属性获取元素的值,并与空字符串进行比较。 - 如果值为空,使用
window.alert()
方法显示一个警告框,其中包含传入的字段名称和 "为必填项" 的提示信息。 - 使用
document.getElementById(strElem).focus()
将焦点返回到该元素上,以便用户可以方便地填写信息。 - 返回
false
,表示验证失败。 - 如果值不为空,则直接返回
true
,表示验证通过。
这个函数可以用于在表单提交之前检查必填字段是否为空,以提供用户友好的验证提示。
$('#eGrid').datagrid('toExcel', { filename: strName + new Date().Format('yyyyMMddhhmmss') + '.xls', worksheet: strName, caption: '<span style="font-size:24px;">' + strName + '</span>', rows: row, formatter: { date: function (value, rowData) { if (value == '' || value == null || typeof value == 'undefined') return "0"; return value; } } }); layer.closeAll('loading'); });
在您提供的代码中,formatter
选项被用来指定一个自定义的格式化函数来格式化日期列。在这个函数中,如果日期值为空或未定义,则返回"0"字符串。这意味着在导出Excel时,所有空的日期值都将被替换为"0"字符串。
如果您希望对日期列进行其他的格式化操作,比如将日期格式化为指定的字符串格式,可以编写一个自定义的日期格式化函数,像这样:
date: function (value, rowData) {
if (value == '' || value == null || typeof value == 'undefined')
return "";
var date = new Date(value);
return date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate();
}
在上面的代码中,我们将日期值转换为Date对象,并将其格式化为'yyyy-mm-dd'的格式。您可以根据需要修改格式化函数来满足您的需求。
if (vecProxyInfo.size() > m_vecProxyInfo.size()) { m_vecProxyInfo.clear(); m_vecProxyInfo.reserve(vecProxyInfo.size()); for (const auto& proxyInfo : vecProxyInfo) { m_vecProxyInfo.append(QSharedPointer<app::system::ProxyInfo>::create(proxyInfo)); } } else if (vecProxyInfo.size() < m_vecProxyInfo.size()) { m_vecProxyInfo.resize(vecProxyInfo.size()); auto itM = m_vecProxyInfo.begin(); for (const auto& proxyInfo : vecProxyInfo) { (*itM)->strName = proxyInfo.strName; (*itM)->eType = proxyInfo.eType; (*itM)->bConnected = proxyInfo.bConnected; ++itM; } } else { auto itM = m_vecProxyInfo.begin(); for (const auto& proxyInfo : vecProxyInfo) { (*itM)->strName = proxyInfo.strName; (*itM)->eType = proxyInfo.eType; (*itM)->bConnected = proxyInfo.bConnected; ++itM; } }怎么优化比较好
这段代码中,主要是对两个 vector 进行比较、更新,可以考虑使用 STL 算法和容器的一些特性进行优化,如下所示:
// 清空原有数据
m_vecProxyInfo.clear();
// 复制新的数据
std::transform(vecProxyInfo.begin(), vecProxyInfo.end(), std::back_inserter(m_vecProxyInfo),
[](const auto& proxyInfo) { return QSharedPointer<app::system::ProxyInfo>::create(proxyInfo); });
这里使用了 STL 算法 std::transform
和容器 std::back_inserter
的特性,可以一行代码实现 vector 元素的复制和插入。
对于第二种情况,也可以使用 STL 算法和容器的特性进行优化:
// 重新分配内存
m_vecProxyInfo.resize(vecProxyInfo.size());
// 更新数据
std::transform(vecProxyInfo.begin(), vecProxyInfo.end(), m_vecProxyInfo.begin(),
[](const auto& proxyInfo, const auto& proxyPtr) {
proxyPtr->strName = proxyInfo.strName;
proxyPtr->eType = proxyInfo.eType;
proxyPtr->bConnected = proxyInfo.bConnected;
return proxyPtr;
});
这里使用了 STL 算法 std::transform
和容器 begin()
方法的特性,可以简化代码。同时,由于 m_vecProxyInfo
中的元素是 QSharedPointer
,可以直接通过指针访问元素的成员变量,避免了使用迭代器的繁琐操作。
相关推荐

















