Как да покажем 2 тирета в Wordpress? Дублиране на select полета във формуляр
фев 092010

Когато ми се наложи да пиша javascript, обикновено гледам да свърша възможно най-бързо и да се върна на приятелска PHP-територия. Затова когато трябваше да напиша динамично добавяне на input елементи, набързо написах първото, което ми хрумна:

  1. <div id="band_container'>
  2. <div class="label">Favourite band(s):</div>
  3. <div class="text-box"><input type="text" name="bands[]" /></div>
  4. <div class="add-button"><a onclick="add_band_input();">add another</a></div>
  5. <div class="clear"></div>
  6. </div>

и съответно в js-файла:

  1. function add_band_input() {
  2.  document.getElementById("band_container").innerHTML += '<div class="label">&nbsp;</div><div class="text-box"><input type="text" name="bands[]" /></div><div class="clear"></div>';
  3. }

Проработи и забравих за него. Няколко дни по-късно забелязах, че ако въведа нещо в input полето и след това натисна линка add another, въведеното от мен изчезва. Това беше проблем. След известно проучване – главно ровене из stackoverflow.com – намерих решение:

  1. function add_band_input() {
  2.  var parentDiv = document.getElementById("band_container");
  3.  var newDiv1 = document.createElement("div");
  4.  var newDiv2 = document.createElement("div");
  5.  var newDiv3 = document.createElement("div");
  6.  newDiv1.innerHTML = '<div class="label">&nbsp;</div>';
  7.  parentDiv.appendChild(newDiv1);
  8.  newDiv2.innerHTML = '<div class="text-box"><input type="text" name="bands[]" /></div>';
  9.  parentDiv.appendChild(newDiv2);
  10.  newDiv3.innerHTML = '<div class="clear"></div>';
  11.  parentDiv.appendChild(newDiv3);
  12. }

Оказа се, че като използвам DOM, кодът е не само по-красив, но и по-стабилен. Това някак ме накара да почувствам непозната до този момент близост с javascript.

  • Google Bookmarks
  • Facebook
  • del.icio.us
  • Digg
  • Print
  • PDF

Leave a Reply

© 2009 Dimitar Chakarov | Suffusion WordPress theme
Creative Commons License
Произведението ползва условията на Криейтив Комънс договор
preload