4

我的问题是我生成了 2 个 aspx 控件,如下所示:

<a id="sortByDate" href="javascript:__doPostBack('sortByDate','')">Date</a>
<a id="sortByLastName" href="javascript:__doPostBack('sortByLastName','')">Last name</a>

所以这些链接允许您对结果进行排序。我试图把它放在一个组合框中,而不是使用链接。

所以我做了这样的

<select id="sortBySelect" onchange="javascript:sortBy(this);">
       <option value="sortByLastName">Last name</option>
       <option value="sortByDate">Date</option>
</select>

使用这个 javascript 函数

function sortBy(sel) {
    var id = sel.value;
    $("#" + id).trigger("click");
}

因此,当您更改组合框中的选定元素时,我想触发链接上的单击事件以调用 dopostback 进行排序。

到目前为止它什么也没做。我尝试了“click”、“onclick”、“onClick”,但没有任何效果。不幸的是,这是针对 IE 怪癖模式的。

我知道,这真的不优雅,但我的时间真的很短,我需要一些快速而肮脏的东西。我最终会制作一个 aspx 控件来很好地处理这个问题。

有什么想法可以让我在 ie quirks 模式下完成这项工作吗?

谢谢

4

4 回答 4

4

尝试更改页面的位置:

document.location = $("#" + id).attr('href');
于 2013-06-27T12:35:27.613 回答
2

你为什么不__doPostBack直接开火:

function sortBy(sel) {
    var id = sel.value;
    __doPostBack(id,'');   
}
于 2013-06-27T12:51:01.420 回答
1

采用:

函数 sortBy(sel) { var id = sel.value; alert($("#" + id).length);//只是为了确认元素存在。 $("#" + id).click(); }

实际上,jQuery 只触发绑定到元素的任何事件。您正在尝试调用 href 操作。

如果您不想更改标记,可以尝试此解决方案

否则,您将不得不更改您的 html 标记以绑定 javascript 事件,然后尝试触发它。

祝你好运!

于 2013-06-27T12:36:19.513 回答
1

一切都按预期工作!

JSFiddle 证明。

确保你有一个 idsortByIdsortByLastName!


JavaScript/jQuery

$(document).ready(function(){
    $('#sortByDate').click(function(){
        alert('Sort By Date Click Event fired!');
    })
});
function sortBy(sel) {
    var id = sel.value;
    $("#" + id).trigger("click");
}

选择

强制window.location改变

JavaScript/jQuery

function sortBy(sel) {
    var id = sel.value;
   window.location =  $("#" + id).attr('href');
}

注意:您不会在 JSFiddle 中看到任何变化:

Refused to display 'https://www.google.ca/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'. 
于 2013-06-27T12:40:06.777 回答