【问题标题】:Javascript call has old values on textbox changeJavascript调用在文本框更改时具有旧值
【发布时间】:2017-08-02 10:28:26
【问题描述】:

我有两个文本框并排的情况,在第一个文本框上,我(在服务器端代码中)添加如下处理程序(注意,我必须在服务器端执行此操作,因为文本框是动态创建的) :

tb.TextChanged += new EventHandler(TextBox_Changed);

// Thickness checker
if (ThicknessCheckColumn != "")
{
     tb.Attributes.Add("onchange", "CheckThickness(this,\'" + ThicknessCheckColumn.Replace(" ", "").Replace("_", "").Replace("-", "").ToUpper() + "\')");
}

现在 TextBox_Changed 事件写入数据库,并根据 Textbox1 中的条目和一些数据库设置设置 Textbox2 的值...

private void TextBox_Changed(object sender, EventArgs e)
        {
            {lots of check and database access code here}
TextBox2.Text = Result
}

javascript 检查复选框 1 的值,并产生警告、错误等。

一切正常,除了警告是针对 Textbox2 的先前值的。

就好像服务器端事件中的代码在验证之后运行,或者实际文本框值在所有函数都得到解决之前不会改变。

这是有原因的吗?有没有更好的方法在服务器端事件完成后调用 javascript 验证?

Javascript函数如下:

function CheckThickness(textControl,checkcolumn) {
    var id = textControl.id;
    // Go get the check value
    var checknumber = ""
    $('form input[type="text"]').each(function () {
        id.toString()
        if (id == checkcolumn) {
                checknumber = this.value;
        }
    })
    // Do the compare
    if (checknumber > 12)
    {
        alert("Proceed with caution!");
    }
    if (checknumber < lowerlimit) {
        alert("LThis blade has not been coated with the recommended thickness,\nbut can still end up within the finished size tolerance.\n\nProceed with caution!");
    }
}

更新 = 8 月 7 日....

因此,从这里开始,我是否可以在文本框“textbox_changed”事件上放置来调用服务器端事件,并从中获取状态,有条件地调用 javascript?这样我就可以在服务器端对实际的真实数据进行检查?

类似的东西(这里是伪代码)...

tb.TextChanged += new EventHandler('set retstatus = call TextBox_Changed; if retstatus = "Y" then call javascript_for_alert');

公共子字符串 TextBox_Changed(....) { ……呜呜呜…… 如果(我的条件 == 真) {返回“Y”}否则{返回“N”} }

否则,如何让 javascript 在当前值而不是旧值上运行???

【问题讨论】:

  • 你能告诉我们javascript函数CheckThickness吗?
  • 函数 CheckThickness(textControl,checkcolumn) { var id = textControl.id; // 去获取校验值 var checknumber = "" $('form input[type="text"]').each(function () { id.toString() if (id == checkcolumn) { checknumber = this. value; } }) // 进行比较 if (checknumber > 12) { alert("谨慎操作!"); } if (checknumber
  • 注 - 原始问题已修改,附加后续问题 - 见上文

标签: javascript c# events server


【解决方案1】:

您是对的:在 JavaScript 验证之后调用服务器端方法 TextBox_Changed。

在单击将表单提交到服务器之前触发客户端单击处理程序。在服务器端处理程序更改之前,客户端验证只能使用页面上显示的 Textbox2 的值。

【讨论】:

  • 那么从这里开始,我是否可以在文本框“textbox_changed”事件上放置来调用服务器端事件,并从中获取状态,有条件地调用 javascript?类似于这里的伪代码)... tb.TextChanged += new EventHandler('set retstatus TextBox_Changed; if retstatus = "Y" then call javascript');公共子字符串 TextBox_Changed(....) { ... blah blah... if (mycondition == true) {return "Y"} else {return "N"} }
  • 是的,这是可能的。您可以在文本更改后使用 AJAX 将输入值发送到服务器,然后根据结果您可以更新其他文本框。问题:您认为为什么需要在服务器上添加点击处理程序?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
相关资源
最近更新 更多