在Url.Action的点击事件中更改li / a标记文本

时间:2014-07-31 19:46:32

标签: javascript jquery asp.net-mvc-4

在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>
}

是否有办法更改链接的文字在调用操作之前?
谢谢

2 个答案:

答案 0 :(得分:0)

试试这个......

$('#myli').click(function () {
        event.preventDefault();  //what does event mean????

更改为:

$('#myli').click(function (event) {
        event.preventDefault();

UPDATE:

为什么你要运行这样的循环,你不能只使用通用的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调用的开头和结尾调用。