2010-11-29 78 views
3

我有一个通过AJAX提取数据的页面。除此之外,我还有一个链接可将所述数据下载为CSV文件。如何在点击后更改锚点的href?

我遇到的问题是,我需要传递一些参数以及click事件,以便服务器可以返回正确的CSV文件。

未经过任何处理的链接看起来是这样的:

<a href="/manager/TargetResults.csv" class="black">Download Target Reports</a> 

这就触发关闭一个ASP.NET MVC控制器动作,返回CSV。我想要做的是在查询字符串中传递两个参数。起初,我以为我可以拦截单击事件和数据添加到查询字符串,像这样:

var holder = $('.hidden-information').first();         
var newOutlets = $('input[name="newoutlets"]', holder).val();         
var queryDate = $('input[name="enddate"]', holder).val();          
var anchor = $(this);          
var link = anchor.attr('href');         
link = link + "?endDate=" + queryDate + "&newOutlets=" + newOutlets; 
anchor.attr('href', link); 

这似乎是在这一阶段改变HREF的时间将不会更新的链接和URL会像它是什么时候碰到服务器?

是否有可能改变一个URL后,它已被点击或我需要看看另一种方法?

感谢

+1

downvoted的人可以提供一些反馈,以便我的问题在未来会更好吗? – Sergio 2010-11-30 12:12:44

回答

2

你可以重定向窗口自己,就像这样:

var holder = $('.hidden-information').first();         
var newOutlets = $('input[name="newoutlets"]', holder).val(); 
var queryDate = $('input[name="enddate"]', holder).val(); 
window.location.href = this.href + "?endDate=" + queryDate + "&newOutlets=" + newOutlets; 
return false; //prevent default going-to-href behavior 

或者,无论是更新的隐藏字段,更新则链接而不是被点击时,例如:

$("#someField").change(function() { 
    var holder = $('.hidden-information').first();         
    var newOutlets = $('input[name="newoutlets"]', holder).val(); 
    var queryDate = $('input[name="enddate"]', holder).val();        
    $("a.black").attr("href", function() { 
    return "/manager/TargetResults.csv" + "?endDate=" + queryDate + "&newOutlets=" + newOutlets; 
    }); 
}); 

主要的区别是这仍然允许正常的点击行为工作,CTRL +点击等。

1

可以使JavaScript重定向的位置: -

var holder = $('.hidden-information').first();         
    var newOutlets = $('input[name="newoutlets"]', holder).val();         
    var queryDate = $('input[name="enddate"]', holder).val();          
    var anchor = $(this);          
    var link = anchor.attr('href');         
    link = link + "?endDate=" + queryDate + "&newOutlets=" + newOutlets; 
    anchor.attr('href', link); 
    location.href=link; 

雅有人可以禁用JS,但你的代码是完全基于JS。 感谢

2

只是四舍五入了你的选择,你可以把一个span的内部链接:

<a href="/manager/TargetResults.csv" class="black"><span>Download Target Reports</span></a> 

...然后勾上spanclick事件,这将在click之前发生的链接。

0

而无需href后,点击将刷新当前页面,那么你需要的东西是这样的:

<a href="#" onclick="f1()">jhhghj</a> 

或者防止这样的滚动:

<a href="#" onclick="f1(); return false;">jhhghj</a> 

还是在返回false您f1功能和:

<a href="#" onclick="return f1();">jhhghj</a> 

....或者,不显眼的方式:

<a href="#" id="abc">jhg</a> 
<a href="#" id="myLink">jhhghj</a> 

<script type="text/javascript"> 
    document.getElementById("myLink").onclick = function() { 
    document.getElementById("abc").href="xyz.php"; `enter code here` 
    return false; 
    }; 
</script>