【问题标题】:JavaScript Setting property of a disabled buttonJavaScript 设置禁用按钮的属性
【发布时间】:2014-02-13 13:01:24
【问题描述】:

预编辑:原来不是按钮失效的问题,而是保存后做了一些其他的动作。我调试了页面,发现在保存的表单上进行更改后,页面会丢失 (document).ready 部分中的 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() 进行一些计算并返回确认文本。

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

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

注意:我必须补充一点,保存后,页面的 url 改变了。查询字符串已添加。这也可能导致问题。

【问题讨论】:

  • ...这些 ID 名称非常庞大。有没有考虑过使用类?
  • 上面的代码在第一个页面加载时没有渲染...所以让代码被渲染
  • @Doorknob 这是因为使用了太多的用户控件。按钮和页面是用户控件。
  • @lavrik 我的问题是“如何使它呈现?” =)
  • 在目标页面上添加 标签。将您的代码放入 /scripts/youFile.js,它应该会运行。

标签: javascript asp.net document-ready


【解决方案1】:

你可以使用

// 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.
   }
});

【讨论】:

  • 我不能使用点击事件,因为它是在确认弹出后触发的。也就是说,当我使用click事件监听器时,它首先显示弹出窗口,然后在弹出窗口中单击“是”后,它会更改弹出窗口的文本,这是没有意义的。
【解决方案2】:

解决了我自己的问题:

正如问题的预编辑中所说,问题是由于保存后进行更改而引起的。我已将我的功能更改为:

$(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());
        });
    }

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 2019-11-23
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    相关资源
    最近更新 更多