【问题标题】:HTML / Javascript: Send field only if it changedHTML / Javascript:仅在字段更改时发送
【发布时间】:2015-01-26 10:22:32
【问题描述】:

我有一个带有文本输入字段的表单。因为数据库操作很昂贵,所以我使用这种方法来检查更改:

<input type=text name=myinput value="Current text">
<input type=hidden name=myinput_original value="Current text">

这样我可以在服务器上比较 myinput 和 myinput_original 并决定是否检查/更新数据库。

这当然是相当多的开销(基本上是从服务器发送/发送到服务器的数据加倍),只是为了检查更改。

目前数据被发送 4 次(两次从服务器到客户端,两次从客户端到服务器)。我想将其减少到 1 - 2 次(如果没有进行任何更改,则数据仅发送一次到客户端,并且没有任何内容发送回;如果发生更改,数据仅发送一次到客户端,并且仅发送一次返回服务器) .

我想用 Javascript 对此进行优化,这样如果用户将文本保持原样,nothing 将被传输到服务器(即从 POST 请求中删除字段“myinput” ) 并且仅在文本发生更改时才传输文本(即正常的 HTML 行为)。这样服务器只会获取更改后的值。

如何在 Javascript 中做到这一点?

【问题讨论】:

  • 您能否在提交时显示您拥有的 javascript,以便我们建议对其进行更改。我建议您删除检查提交值时的元素
  • 目前客户端没有Javascript(与表单相关),它只是我上面发布的纯HTML。

标签: javascript forms http-post


【解决方案1】:

您需要为focusout(分别为blur)附加事件侦听器,并将该值与您的原始输入数据进行比较。如果这两个值匹配,则没有任何变化。

document.getElementByName( 'myinput' ).addEventListener( 'focusout', function( event ) {
    if( document.getElementByName( 'myinput_original' ).value !== this.value ) {
        alert( 'new value differs' );
    };
}, false);

演示http://jsfiddle.net/faphygty/

【讨论】:

  • 好的,这样我可以检查更改,但是如果没有输入更改,如何从 POST 请求中删除“myinput”? (当然,如果用户从不输入文本字段,这也必须发生。)
  • 我还想删除“myinput_original”字段,因为这会使从服务器发送到客户端的数据加倍。目前数据被发送 4 次(从服务器到客户端两次,从客户端到服务器两次)。我想将其减少到 1(如果没有进行任何更改,则将数据发送一次到客户端并且没有任何内容发送回)到 2(如果发生更改,则将数据发送一次到客户端,然后一次发送回服务器)。跨度>
  • 要回答这个问题,您需要提供实际收集(表单)数据的源代码。
  • 不涉及 JS 代码,它只发送“myinput”和“myinput_original”,我执行一个简单的 'if ($_REQUEST['myinput'] != $_REQUEST['myinput_original'] )´ 在服务器上。我想将此逻辑从服务器(在我的情况下为 PHP)移动到客户端(Javascript)。
猜你喜欢
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2017-05-25
  • 2010-10-29
相关资源
最近更新 更多