【问题标题】:Change value of text box using javascript (Jquery) before post back ASP.NET在回发 ASP.NET 之前使用 javascript (Jquery) 更改文本框的值
【发布时间】:2011-09-12 13:37:27
【问题描述】:

当用户按下提交表单按钮时,我正在尝试更改一组文本框的值(其中包含灰色的建议)。此按钮使用 OnClientClick 运行服务器端方法,该方法提交数据并执行大量其他操作。

现在我的问题是我不能:放入一个 javascript 函数,该函数将在服务器被命中之前更改值,或者在 javascript 中调用服务器端方法而不是按钮 OnClientClick 事件。

我试过了:

$(this.form).submit(function(){
//Change value here
});
//using OnClientClick to call function

$("#"+"<%=submitBtn.ClientID %>").click(function(){
    //Change values here
    __doPostBack("<%=submitBtn.ClientID %>");
});
//not using OnClientClick to call server method

(很确定这行不通) 和

$("#"+"<%=submitBtn.ClientID %>").click(function(){
    //Change values here
});
//using OnClientClick still to call function

我被难住了


编辑

是的,我显然没有提供足够的信息, 当我使用提交事件时会发生什么是服务器事件在 JavaScript 事件之前触发,因此在我发送值之前进行服务器端验证时,我有错误的值,更改为客户端验证没有任何意义,因为当我将表单数据发送回数据库时,我仍然会遇到同样的问题。


更新

所以我仍然有一个问题(无论是因为这个还是精神上的)。
由于在我之前从事此工作的白痴(现在我必须修复它),他们从底部的按钮中删除了提交行为(asp.net),因为他们使用了一些服务器端技巧来确定是否应该使用一些验证器打开或关闭(实际上应该由客户端执行此操作),因此他们必须将其关闭,因为如果不关闭它会触发验证器。

无论如何...所以我仍然遇到问题,按钮的单击功能似乎没有及时触发或脚本同时运行。我通过在后面的代码上添加警报和断点来测试这一点,断点触发并且警报也触发。呜呜……是啊。 有什么办法可以通过从按钮中删除“onclientclick”并调用它在CB中调用的函数来规避这个问题? 有任何想法吗? (请?)


小更新:

还是想不通:(。有人对这个问题感到困惑吗?

【问题讨论】:

  • 为什么你不能适应 Javascript 函数?
  • 那么到底是什么问题呢?值是否没有改变...您的功能是否没有运行...您尝试解决的确切问题的更多细节会有所帮助。
  • 我为您编辑了我的问题,该函数确实运行并更改了客户端的值,但它不会转换到服务器端,因为服务器端首先触发。

标签: javascript jquery asp.net


【解决方案1】:

是的,这个功能应该可以工作

$(this.form).submit(function(){
//Change value here
});

但罪魁祸首可能是注释部分:“// 此处更改值。”如果您使用其中之一,

$('#target').text('my new info');
$('#target').html('my new info');

...你会遇到麻烦的。你需要使用 .val()

$('#target').val('my new info');

【讨论】:

  • 我正在使用 .val(),它工作正常,服务器只是看不到更改。
【解决方案2】:

表单提交之前 JS 触发所有事件。

让按钮的 onClientClick 事件更改值。如果需要,可以按顺序调用函数。

jQuery 对事件做了一些时髦的事情,你无法确定它们在附加后会触发什么顺序。您必须明确指定要调用的函数。

&lt;button id="some_button" onclick="SetValues(); SubmitForm();" /&gt;

【讨论】:

  • 我已经放弃了,但这正是正在发生的事情。这是完美的解决方案。谢谢朋友的回答
  • 很高兴为您提供帮助。此外,当在回发之前有很多事情需要发生时,
    元素会暴露一个onsubmit 事件,该事件可以触发一个 JS 函数来执行您需要的操作。据我所知,这是表单发送到服务器之前触发的最后一个事件。 jQuery 非常好,但它的异步特性会产生竞争条件。
【解决方案3】:

偶然发现了这个。自从您第一次发布问题以来已经有一个月了,所以您可能已经修复了它。但是,我想我还是会添加我的想法。

首先,您的代码被忽略是有道理的。当您绑定到 submit 和 onclick 事件时,您的函数将添加到事件句柄列表中。事件处理程序从第一个添加到最后一个添加进行处理。所以回发是在你的 jquery 代码被调用之前开始的。

要解决这个问题,您需要更改 OnClientClick 调用的函数中的代码,或者编写一个调用您的代码的包装函数,然后调用 OnClientClick 调用的内容并更改 OnClientClick 以调用您的包装函数。

【讨论】:

    【解决方案4】:

    这个函数应该可以解决问题:

    $(this.form).submit(function(){
    //Change value here
    });
    

    只需确保在将文本字段发送到服务器之前再次启用它们,否则服务器不会接收它们

    【讨论】:

    • 启用是什么意思,它们从未被禁用。您可能混淆了“灰色”的措辞,文本框中的建议只是灰色的。即颜色:#ddd
    • 啊,我明白了。那么忘记我的评论
    【解决方案5】:

    我使用了提交按钮的 id 来检查“点击”

    http://jsfiddle.net/sreeprasad/7urvg/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      相关资源
      最近更新 更多