2014-02-13 107 views
0

PRE编辑:事实证明,这不是关于按钮的残疾,而是在保存后做出其他一些操作。我调试了该页面,发现在对保存的表单进行更改后,页面会丢失(document).ready部分中的javascript功能。我已经添加了解决方案作为答案。JavaScript设置禁用按钮的属性


我有一个入口页面,有两个按钮保存和批准。机制是这样的,你可以填写表格并保存,然后批准。您也可以通过刷新页面或从保存的页面列表中找到保存的页面。

如果表单未保存,则批准按钮将被禁用。我保存后从代码中启用它。批准按钮还有一个确认按钮扩展程序,它从javascript中接收确认文本。我加载它在(document).ready和它的代码是:

$(document).ready(function() { 
     $("#ASPxSplitter1_ContentPlaceHolder1_uctActivityEntry1_tbActivity_tbHistory_btnApproveActivity_btnApprove").click(function() { 

      $("#ASPxSplitter1_ContentPlaceHolder1_uctActivityEntry1_tbActivity_tbHistory_btnApproveActivity_lblMessage").text(GetConfirmTextForApprove()); 
     }); 
    }); 

,其中GetConfirmTextForApproval()使得一些计算和返回确认文本。

现在,我的问题是,当您打开窗体时禁用按钮,上面的代码不会在第一次加载页面时呈现。这导致的问题是,当我开始填写表单并保存它时,然后批准它,我没有得到任何确认文本,因为它不运行该函数。但刷新页面后,或从另一页转到保存的表单页面后,我会得到正确的确认文本。

那么,我该如何解决这个问题呢?即使在首页加载时禁用了按钮,我如何获得正确的确认文本?

注意:我必须补充说,保存后,页面的网址会发生变化。查询字符串被添加。这也可能导致问题。

+1

... **哇这些ID名称很大。有没有考虑过使用类? – Doorknob

+0

上面的代码不会在第一页加载时呈现......所以使代码呈现 – lavrik

+0

@ Doorknob这是因为使用了这么多的用户控件。按钮和页面是用户控件。 –

回答

0

您可以使用

// Disable #x 
$("#x").prop("disabled", true); 

// Enable #x 
$("#x").prop("disabled", false); 

,但不是在文件准备好,你需要在你想启用按钮。然后,你需要创建一个事件侦听器

$("#button").click(function(){ 
    //Your code 

    if(GetConfirmTextForApproval()){ 
    //You active the button and the text that you want show. 
    } 
}); 
+0

我无法使用点击事件,因为它在确认弹出窗口后触发。也就是说,当我使用click事件侦听器时,它首先显示弹出窗口,然后在弹出窗口中单击“是”,然后它更改弹出窗口的文本,这是没有意义的。 –

0

解决我自己的问题:

正如在这个问题的前编辑说,这个问题是因为制造后的保存更改而造成的。我已将我的功能更改为:

$(document).ready(function() { 
    SetConfirmMessageForApproval(); 
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 
}); 

function EndRequestHandler(sender, args) { 
    SetConfirmMessageForApproval(); 
    } 

function SetConfirmMessageForApproval() { 
     $("#ASPxSplitter1_ContentPlaceHolder1_uctActivityEntry1_tbActivity_tbHistory_btnApproveActivity_btnApprove").click(function() { 
      $("#ASPxSplitter1_ContentPlaceHolder1_uctActivityEntry1_tbActivity_tbHistory_btnApproveActivity_lblMessage").text(GetConfirmTextForApprove()); 
     }); 
    } 

如果其他人需要,这会有所帮助。