【问题标题】:Javascript function for form created using Javascript使用 Javascript 创建的表单的 Javascript 函数
【发布时间】:2015-07-12 13:22:02
【问题描述】:

我有一个脚本,当一个按钮被点击到一个 HTML 页面时,它会添加一个新表单,代码如下:

    <script>
var counter = 1;
var limit = 10;
function addInput(divName){
     if (counter == limit)  {
          alert("Max number of forms, " + counter );
     }
     else 
    {
          var newdiv = document.createElement('div'); 
        newdiv.innerHTML = "<form name='frmMain' action='prelucrare.php' method='POST'><div class='slot' id='dynamicInput' align='center'> Masina " + (counter +1 ) + "<table border='1'><tr><td align='right'><label for='marca'>Marca:</label></td><td colspan='2' align='left'>"
        + "<select id='marc' name='marc'><option selected value=''></option>"
    + "<tr><td align='right'><label for='motorizare1'> Motorizare:</label></td> <td><input type='range' name='motorizare1[]Input' min='0.6' max='5' step='0.1' value=2 id=motor1 oninput='outputUpdate1(value)'></td><td><output for=motorizare1 id=moto1>2</output></td></tr>"
        + "</div></form>"               
        ;
        }
          document.getElementById(divName).appendChild(newdiv);
          counter++; 
                                                } 
    </script>
    <input type="button" value="Adauga" onClick="addInput('dynamicInput');">

我有下面的脚本,它改变了滑块的值。

<script>
    function outputUpdate1(mot1) {
                                document.querySelector('#moto1').innerHTML = mot1;
                                                }         
    </script>

我的问题是 JS 代码只更改第一个表单的输入,即使滑块是从另一个表单激活的。 简而言之,滑块应该以激活它的形式返回值;不仅在第一种形式中添加。 谢谢!

【问题讨论】:

  • 看起来您在每个滑块输出上硬编码了 ID moto1&lt;output for=motorizare1 id=moto1&gt;。 id 必须是唯一的,否则您的选择器每次都会找到具有该 id 的第一个元素。在您的情况下,第一个 moto1 id 在您生成的第一个表单中
  • 谢谢!是否有解决方案可以在每次显示新表单时生成不同的 ID?
  • Math.random().toString(36).substring(10)。我是从 Stack Overflow 上的另一个问题中得到的。您需要根据浏览器调整第二个数字(Chrome 产生 6-8 个字母/数字,IE 2-4 等)

标签: javascript html forms function slider


【解决方案1】:

根据我的评论,问题源于所有输出元素的 id 值相同 (moto1)。由于您正在跟踪页面上表单的数量(您的 counter 变量),因此您实际上已经获得了使它们唯一所需的所有变量。您可以使用它来代替当前的输出 HTML:

    "<input type='range' name='motorizare1[]Input' min='0.6' max='5' step='0.1' value=2 id='motor_" + counter + "' oninput='outputUpdate1(value)'/>"
    "<output for=motorizare1 id='moto_" + counter + "'>"

您可以更新您的函数以解析出您想要更新的输出的正确索引,因为如果您使用上面的 HTML,它们应该是同步的:

function outputUpdate1(mot) {
    // Get the counter part of the range element's id
    var index = mot.id.split('_')[1];
    document.querySelector('#moto_' + index).innerHTML = mot;
}    

您可能需要对问题中未提供的代码进行一些调整,但这是使 id 值唯一以及如何在不提前知道确切 id 的情况下访问它们的一种方法。

【讨论】:

  • 谢谢!我得到了这个想法,我正在努力让它发挥作用。但它仍然不起作用,我尝试alert ( index ); 检查它是否有效,但没有结果。通常,拆分方法应该导致 index[0] = 'moto' 和 index[1] = counter。
  • 如果拆分索引的演示会有所帮助,您可以查看this fiddle
  • 谢谢@JonMichalik9,我用你的代码作为新代码的灵感,而且效果很好。再次感谢你。这是:function changeId() { if (counter=="2") { document.getElementById("moto1").id = "id1"; } if (counter=="3") { document.getElementById("moto1").id = "id2"; } alert ( counter ); } function outputUpdate1(vot) { if (counter=="2") { document.querySelector('#id1').innerHTML = vot; } else if (counter=="3") { document.querySelector('#id2').innerHTML = vot; } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 2023-03-22
  • 2020-08-23
  • 1970-01-01
相关资源
最近更新 更多