2017-08-19 61 views
-4

多种形式并用的onclick事件输入我目前的工作对我的朋友们,我想在未来发布的网站项目。我目前正在构建页面的html和css一侧,并且需要在用户输入的页面中实现动态事件(如果这是它的调用方式)。使用JavaScript添加

当谈到javascript/jquery(我能够得到正在发生的事情的一般概念,但我的语法理解是便便)并且只有html和css的基本知识时,我有一点点的理解。现在,我知道我的调查非常广泛,我非常感谢任何帮助,或指向正确的方向!

到目前为止,我使用Google搜索到的各种代码块已经为我工作,但仅限于执行单个函数(例如:切换函数有效,但create.element函数不能)。

这是我试图用JavaScript来修改我当前的html代码:

<div class="bttiendas"> 

<button class="btndag">Agregar</button> 
<button class="btndgu">Guardar</button> 

</div> 

<div class="rdatos"> 

<form class="thf"> 
<input class="morehf" type="button" value="+/-" /> 
<input class="chf" type="text" placeholder="Lorem ipsum" readonly /> 
<input class="chf" type="text" placeholder="Lorem ipsum" readonly /> 
<input class="chf" type="text" placeholder="Lorem ipsum" readonly /> 
<input class="edithf" type="button" value="Edit" /> 
<input class="erasehf" type="reset" value="Erase" /> 
</form> 

<form class="trf"> 
<input class="crf" type="text" placeholder="POS" readonly /> 
<input class="crf" type="text" disabled /> 
<input class="crf" type="text" disabled /> 
<input class="crf" type="text" disabled /> 
</form> 

</div> 

我试图用JavaScript来实现如下:

- 要能够用JavaScript来创建既.thf.trf形式动态地沿着与每个其他输入/按钮是每个窗体内部与点击.btndag按钮(这是一个onclick事件接着create.element如果我没有错)。

- 因为.morehf <input button>.trf的隐藏/显示切换功能以及该窗体中的其他任何内容。

-Toggle禁用与.edithf <input button>.crf输入文本框。

- 要能够与.erasehf <input button>擦除/删除这两个.thf.trf形式(其输入文本框和按钮.morehf .edithf .erasehf)。

- 以及能够保存/提交(我不知道这是在这里,正确的说法),任何添加和填写完整的表格字段(当我们想要更改发送到我们的数据库)。

再次我将不胜感激任何帮助,您可以给我,谢谢你提前为您的时间。

+0

“添加”'tht'和'trf'是指显示并隐藏它或创建元素?我不清楚你想要什么 – Shawn31313

+0

对不起,我打算创建!让我澄清一下。 –

+0

对不起,不清楚。你是什​​么意思创建? – Harry

回答

0

您可以将jquery导入到您的解决方案中。

第1步:你没有任何意义。你的意思是你想从某处加载数据到你的表单来编辑数据或者什么?这是如何动态的?它看起来像一个页面上的静态表单。

对于第2步:

<input class="morehf" onclick="toggleTrf()" type="button" value="+/-" /> 

    <script> 
     function toggleTrf() { 
      $(".trf").toggle() 
      } 
    </script> 

第3步:

<input class="edithf" onclick="disableInputs()" type="button" value="Edit" />  

    <script> 
     function disableInputs() { 

      if($(".crf").is(":disabled");){ 

      //jquery 1.6+ 
      $(".crf").prop('disabled', false); 
      //jquery 1.5 - 
      $(".crf").removeAttr('disabled'); 
      } 
      else { 
      //jquery 1.6+ 
      $(".crf").prop('disabled', true); 
      //jquery 1.5 - 
      $(".crf").attr('disabled','disabled'); 
      } 
      } 
</script>  

第4步:目前还不清楚是什么,你的意思是擦除形式,但你可以在输入清除文本

<input class="erasehf" thpe="reset" onclick="clearInputs()" value="Erase" /> 

    <script> 
     function clearInputs() { 
      $("input").val("") 
      } 
    </script> 

步骤5:

<form action="some/path"> 
     <input name="someName" type="text" text="random field" value="1" /> 
     <button type="submit">submit</button> 
    </form> 

该提交按钮会将表单提交到您在表单操作中指定的任何路径。至于保存到数据库等等,不可能猜测你将使用哪种技术来做到这一点。在手机上输入代码格式。

+0

我很抱歉没有明确我的第一步。该页面会将用户信息(从数据库中检索到)加载到这些表单中并显示出来,除此之外,他们还可以选择添加空白表单,以便输入新信息并保存。我对这个环境很陌生,在使用正确的术语时遇到困难,但仍然感谢您的帮助。 –

0

我相信我已经包括了OP想要的一切。非jQuery方法(ES6)。 JSFiddle

首先让我们来添加一些辅助变量:

let formSets = 0; 
let createForm = function(id) { 
    return `<form data-id='${id}' class="thf"> 
     <input class="morehf" type="button" value="+/-" /> 
     <input class="chf" type="text" placeholder="Lorem ipsum" readonly /> 
     <input class="chf" type="text" placeholder="Lorem ipsum" readonly /> 
     <input class="chf" type="text" placeholder="Lorem ipsum" readonly /> 
     <input class="edithf" type="button" value="Edit" /> 
     <input class="erasehf" type="reset" value="Erase" /> 
     </form> 

     <form data-id='${id}' class="trf"> 
      <input class="crf" type="text" placeholder="POS" readonly /> 
      <input class="crf" type="text" disabled /> 
      <input class="crf" type="text" disabled /> 
      <input class="crf" type="text" disabled /> 
     </form>`; 
}; 

添加onclick事件 “添加” 功能。我们不得不重新分配点击事件动态添加的元素,或者我们可以做事件委派像我一样的删除按钮:

document.getElementsByClassName('btndag')[0].onclick =() => { 
    document.getElementById('a').innerHTML += createForm(++formSets); 

    for (let ii = 0; ii < formSets; ii++) { 
     document.getElementsByClassName("morehf")[ii].onclick =() => { 
      document.getElementsByClassName("trf")[ii].classList.toggle('hide'); 
     } 

     document.getElementsByClassName("edithf")[ii].onclick =() => { 
      let form = document.getElementsByClassName("trf")[ii].children; 
      for (let i = 0; i < form.length; i++) { 
       let input = form[i]; 

       if (input.disabled == true) { 
        input.disabled = false; 
       } else { 
        input.disabled = true; 
       } 
      } 
     } 
    } 
}; 

添加删除按钮有点不同使用事件代表团,使我们能够针对另一根据父母目标元素:

document.getElementById('a').onclick = function(e) { 
    let t = e.target; 

    if (t.className == 'erasehf') { 
     let me = t.parentNode; 
     let sib = me.nextElementSibling; 

     me.parentNode.removeChild(me); 
     sib.parentNode.removeChild(sib); 
    } 
} 

最后,提交数据。这一部分更加模糊一点,因为我不确定你想如何格式化数据。但这里是你将如何使用提交表单AJAX:

document.getElementsByClassName('btndgu')[0].onclick = function() { 
    Request("/linkto/save.asp").post({ 
     //datahere 
    }).then(function() { 
     //on success 
    }, function() { 
     //on failure 
    }); 
} 

注意,这里使用一个辅助的AJAX功能,我提出:

let Request = function(url, opt) { 
    // start loader 
    var AJAX = function(type, url, data, success, failure, cache) { 
     var InitRequest = new Promise(function(accept, reject) { 
      var request = new XMLHttpRequest(); // initiate new XMLHttpRequest 
      var done = false; 
      var compile = function(data) { //turn the data object into a usable source for the send function 
       var send = []; 
       for (var item in data) { // compile all data in "item=data" strings 
        send.push(item + "=" + encodeURIComponent(data[item])); 
       } 
       send = send.join("&"); // combine data to form "item1=data1&item2=dat2&item3=data3" 
       return send; 
      }; 

      // if we choose not send any data, then the data variable will take the place of the success variable 
      // because of this, we have to also shift the failure function 
      if (typeof data === "function") { 
       success = data || accept; 
       failure = success || reject; 
       data = ""; 
      } else { 
       success = success || accept; 
       failure = failure || reject; 
       data = compile(data); 
      } 

      if (type.toUpperCase() == 'POST') { 
       request.open(type.toUpperCase(), url, true); 

       // this header allows POST requests to work 
       request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
      } else if (type.toUpperCase() == 'GET') { 
       // for GET requests, we need to put all data in the url 
       // we would end up with test.php?item1=data1&item2=dat2&item3=data3 
       request.open(type.toUpperCase(), url + "?" + data, true); 
      } else { 
       console.error('Incorrect request type submitted: "' + type + '" is not supported.'); 
       return false; 
      } 

      // in order for laravel to properly send ajax requests 
      request.setRequestHeader('X-CSRF-TOKEN', $('meta[name="csrf-token"]').attr('content')); 
      request.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 
      request.onreadystatechange = function() { 
       if (!done) { 
        if (request.readyState === 4) { // when the readyState == 4, we have completed the request 
         if (request.status === 200 || request.status === 0 /*for ff bug*/) { 
          success(request.responseText, request); 
         } else { //if failed 
          try { 
           request.responseJSON = JSON.parse(request.responseText); 
          } catch (e) { 
           return false; 
          } 

          failure(request); 
         } 
         // hide the loader because the request has finished 
         done = true; 
        } 
       } 
      }; 

      // send off the request 
      request.send(data); 
     }); 
     return InitRequest; 
    }; 

    // The "opt" variable also goes into place as the 
    // Cache reset 
    if (opt && typeof opt !== "string" && typeof opt !== "boolean") { 
     var DEFAULTS = { 
      type: "GET", 
      data: {}, 
      cache: false, 
      success: function() {}, 
      failure: function() {} 
     }; 
     var o = $.extend(DEFAULTS, opt); 

     return AJAX(o.type, url, o.data, o.success, o.failure, o.cache); 
    } else { 

     return { 
      post: function(data, success, failure, cache) { 
       return AJAX("POST", url, data, success, failure, cache); 
      }, 
      get: function(data, success, failure, cache) { 
       return AJAX("GET", url, data, success, failure, cache); 
      } 
     } 
    } 
} 

关于通过AJAX

发送数据的更多资讯

数据在你的情况应与ID对应:

{ 
    0: { 
     trf: { 
      input1: "..", 
      input2: "..", 
      input3: ".." 
     } 
    }, 
    1: { 
     trf: { 
      input1: "..", 
      input2: "..", 
      input3: ".." 
     } 
    } 
} 
+0

这确实有用,非常感谢您的帮助! –