在Razor视图中有以下html:
`<li id="myli"><a href="@Url.Action(MyAction, new { Id = ViewBag.Id })" >TEST</a></li>
我不能以任何方式改变它。某种&#34;请等待&#34; MyAction正在处理时需要显示指示符。 我尝试了很多方法,从非常简单的方法开始:改变链接的文本&#34; TEST&#34;到&#34;请等待&#34;在$(&#39;#myli&#39;)。点击事件。但是只有在从控制器操作返回后才会发生文本更改。
@section scripts{
<script type="text/javascript">
$('#myli').click(function () {
event.preventDefault();
$(this).text("Please Wait"); // displayed only After return from controller action
sleep(2000);
)};
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds) {
break;
}
}
}
</script>
}
是否有办法更改链接的文字在调用操作之前?
谢谢
答案 0 :(得分:0)
试试这个......
$('#myli').click(function () {
event.preventDefault(); //what does event mean????
更改为:
$('#myli').click(function (event) {
event.preventDefault();
为什么你要运行这样的循环,你不能只使用通用的setTimeout吗?
$('#myli').click(function (event) {
event.preventDefault();
$(this).text('Please Wait...');
setTimeout(function(){alert('Thanks For Waiting!')},5000)
});
请参阅jsfiddle中的here
答案 1 :(得分:0)
我认为使用ajax.actionlink
将是明智的,它将在运行时转换为锚标记。
<li id="myli"> @Ajax.ActionLink("TEST", "Action", "Controller", new { Id = ViewBag.Id }, new AjaxOptions
{
HttpMethod = "Get",
OnSuccess = "successFunction",
OnFailure = "onFailureFunction",
OnBegin = "startAjax",
LoadingElementId = "PleaseWaitContainer",
OnComplete = "endAjax"
})
</li>
您可以使用属性display: none
为 PleaseWaitContainer 编写自定义类。休息将由ajax电话处理。
<div id="PleaseWaitContainer" style="display:none;">Please wait</div>.
您还可以使用startAjax()
和endAjax()
等java脚本函数,这些函数可以在ajax调用的开头和结尾调用。