所以我建立了一个实时搜索框,可以更新密钥。当用户键入时,它会使用与字符串输入匹配的项填充范围。
我正在尝试使用锚标记动态创建链接,这样当用户点击弹出结果范围中的一个结果时,它会获取用户员工编号,并在服务器端拾取客户回复的位置。< / p>
在keyup上运行的Javascript函数,用于构建结果范围:
function liveSearch() {
//debugger;
$("#<%= QuickNameSearch_error.ClientID %>").text("");
$("#<%= QuickNameSearch_error.ClientID %>").hide("");
var searchField = $("#<%= QuickNameSearch_textbox.ClientID %>").val();
if (searchField.length == 0) {
$("#QuickNameSearchResults").hide();
return;
}
else {
$("#QuickNameSearchResults").show();
}
var regex = new RegExp(searchField, "i");
var output = '<div class="liveSearchOuter">';
var count = 0;
$.getJSON('Scripts/LiveSearchData.js', function (data) {
$.each(data, function (key, val) {
try {
if ((val.preferred.search(regex)) != -1 || (val.surname.search(regex) != -1)) {
if (count % 2 == 0) {
output += '<div class="liveSearchItem liveSearchItemLight">';
}
else {
output += '<div class="liveSearchItem liveSearchItemDark">';
}
output += "<div><b><a id='hlEmpName" + count + "' href='javascript:void(0)' onclick='CustomPostBack('" + val.emp_no.trim() + "');'>" + val.preferred.trim() + " " + val.surname.trim() + "</a></b></div>";
output += "<div><b><a id='hlEmpEmail" + count + "' href='javascript:void(0)' onclick='CustomPostBack('" + val.emp_no.trim() + "');'>" + val.email.trim() + "</a></b></div>";
output += '</div>';
count++;
}
}
catch (err) {
alert(err);
}
});
if (count == 0) {
output += '<div class="liveSearchItem liveSearchItemLight"><div>No results found</div>';
}
output += '</div>';
$("#QuickNameSearchResults").html(output);
});
}
function CustomPostBack(argStr) {
debugger;
__doPostBack('CustomPostBack', argStr);
}
在页面加载上运行的C#函数:
if (Page.IsPostBack)
{
if ((Page.Request["__EVENTTARGET"] == "CustomPostBack") && (Page.Request["__EVENTTARGET"] != ""))
{
string eventTarget = Page.Request["__EVENTTARGET"];
string eventArgument = Page.Request["__EVENTARGUMENT"];
ShowEmployeeProfile(eventArgument.Trim());
}
}
我之前在javascript中使用自定义回发效果很好,但从来没有使用过锚标记。我在这里读到这是可能的,但我看不出我出错的地方,我几个小时都在阅读问题和答案。
我遇到麻烦的主要两行是:
output += "<div><b><a id='hlEmpName" + count + "' href='javascript:void(0)' onclick='CustomPostBack('" + val.emp_no.trim() + "');'>" + val.preferred.trim() + " " + val.surname.trim() + "</a></b></div>";
output += "<div><b><a id='hlEmpEmail" + count + "' href='javascript:void(0)' onclick='CustomPostBack('" + val.emp_no.trim() + "');'>" + val.email.trim() + "</a></b></div>";
我尝试过一百种小变化。他们在运行时渲染:
<a id="hlEmpName0" href="javascript:void(0)" onclick="CustomPostBack(" 123456');'="">Testy McTest</a>
页面不会回发并到达页面加载以捕获员工编号。
答案 0 :(得分:0)
所以看起来你的报价有点棘手。看看你的最后一个片段:
onclick="CustomPostBack(" 845169");"
您的onclick
被缩短了,因为您的参数使用双引号。浏览器将其视为onclick="CustomPostBack("
,剩下的部分只是在不知名的地方的文本。
如果此值始终为数字,则只需删除它周围的引号:
output += '<div><b><a id="hlEmpName' + count + '" href="javascript:void(0)" onclick="CustomPostBack(' + val.emp_no.trim() + ');">' + val.preferred.trim() + ' ' + val.surname.trim() + '</a></b></div>';
如果它必须是字符串值,那么您可以通过执行'
而不是"
来转义单引号:
output += '<div><b><a id="hlEmpName' + count + '" href="javascript:void(0)" onclick="CustomPostBack('' + val.emp_no.trim() + '');">' + val.preferred.trim() + ' ' + val.surname.trim() + '</a></b></div>';