Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取包装器';s innerHTML,包括用户在输入元素中输入的值_Javascript_Html_Mpdf - Fatal编程技术网

Javascript 获取包装器';s innerHTML,包括用户在输入元素中输入的值

Javascript 获取包装器';s innerHTML,包括用户在输入元素中输入的值,javascript,html,mpdf,Javascript,Html,Mpdf,我有一个多页表单,它基于DIV visibility设置为visible或hidden来显示。一旦用户对他/她的答案感到“满意”,他们将单击一个按钮。此时需要做的事情之一是获取给定DIV的所有呈现HTML,并将其全部设置为字符串变量,以便可以与mPDF一起使用 我发现了两种方法,实际上似乎抓住了一些东西…只是不是我需要的 我的部门是“第一页” 我正在尝试设置字符串变量“stringContent” 以下是简化表格: <div id="page1" class="page" style="v

我有一个多页表单,它基于DIV visibility设置为visible或hidden来显示。一旦用户对他/她的答案感到“满意”,他们将单击一个按钮。此时需要做的事情之一是获取给定DIV的所有呈现HTML,并将其全部设置为字符串变量,以便可以与mPDF一起使用

我发现了两种方法,实际上似乎抓住了一些东西…只是不是我需要的

我的部门是“第一页”

我正在尝试设置字符串变量“stringContent”

以下是简化表格:

<div id="page1" class="page" style="visibility:visible;">
Applicant Name: <input type="text" size="50" name="name1" >
</form>
<p><input type="button" id="C1" value="Continue" onClick="showLayer('page2')"></p>
</div>
两者都不在输入文本框中显示用户的输入

我想做的事可能吗?其他人似乎也以类似的方式成功地使用了mPDF……不过,也许不是我试图采用的方式


我走错方向了吗?有没有更好的方法将其输入mPDF,这正是我在这里想要的?

您没有获得输入文本框,因为您从div page1获得的是文本,而不是输入。要获取输入文本框值,请尝试以下操作

var stringContent = $('#page1').find('input').val();

您说从包装元素返回的innerHTML/innerText“都不显示用户在输入文本框中的输入”,您想“获取呈现的HTMl”

“问题”是呈现的html没有(或空)默认值。我说的是html源代码中的“物理”值:

用户在输入元素中输入的是元素的“内存”(也就是说)值,而不是html源中提供的默认值。因此,innerHTML完全按照它应该做的做。。抓取html源代码

现在,我在上面的评论中说,我有一个肮脏的想法来解决这个问题:

如果输入元素值发生更改(onchange或甚至onblur),则可以像这样更新元素的物理值属性:
this.setAttribute('value',this.value)

因此,当您现在获得wrappig元素的innerHTML时,您将看到html源现在设置了默认值属性

请参见此处演示的概念

function foobar(wrapperId){
   var elms=document.getElementById(wrapperId).getElementsByTagName('input')
   ,      L=elms.length
   ,      F=function(){this.setAttribute('value', this.value);}
   ;
   while(L--) elms[L].onchange=F;
   //textarea's use innerHTML instead of value for their default in-source 'value'
   //select and radiobuttons etc might need some work to, take it from here.
}

window.onLoad=function(){
   foobar('wrapperDivId');
};
注意,您不能在源代码中设置事件函数,因为您将通过innerHTML将其复制到。因此,必须通过javascript设置它们


希望这有帮助。

我看了一会儿,我想我找到了一个很好的解决方案。我编写了一个小函数,用另一个表单的
.serializeArray()
数据填充表单。我只在Chrome上试过。下面是函数:

var populate = function ($form, data) {

  $.each( data, function (idx, field) {

    var $ctrl = $form.find(':input').filter(function(){ return this.name === field.name; });
    var value = field.value;
    var type = $ctrl.attr('type') ? $ctrl.attr('type') : 'text';

    switch (type) {
      case "radio":
      case "checkbox":
        $ctrl.each(function(){
          var $this = $(this);
          if( $this.val() === value ){
            $this.prop('checked', true);
          }
        });
      break;
      default:
        $ctrl.val( value );
      break;
    }

  });

};
如果您愿意,这里有一个小演示供您使用:
感谢所有做出贡献的人。我仔细研究了每一个答案…决定我可能应该走另一个方向。我现在将表单发布到另一个文件中,希望我能够从生成的HTML中进行“干净”的提取,并将其提供给mPDF。非常感谢…这些都是好东西,特别是考虑到我(显然)只是在学习

它看起来像是无效的HTML:元素需要嵌套,而不是交错。那么您想从现有div中获取innerHTML,包括用户在inputfields中输入的值吗?如果是这样的话,那么问题是这些值不在html中(
看起来有人已经有类似的问题了。这解决了你的问题吗?可能是重复的只是为了澄清…我发布的代码是一个非常简化的版本…有许多文本输入和单选按钮以及计算变量。我需要一种方法来获取“全部”这样就可以插入mPDF了。上面这行会显示“一切”吗或者仅仅是输入的答案?在本例中,输入基于给定的示例,但这取决于html标记。也许您可以在JSFIDLE上显示html标记,我将了解它。无论如何,由于它有很多文本输入和单选按钮,您不应该将其保存为字符串,而应该保存为数组或对象,否则您必须使用c创建大量字符串变量。我希望得到的最终结果是将mPDF中显示的呈现HTML作为原始的PDF版本…据我所知,设置$HTML字符串变量是唯一的方法。(我知道在此之前我没有提到过这个名字……但是如果我可以设置stringContent,那么我也可以设置$html并让它提供给mPDF。
var populate = function ($form, data) {

  $.each( data, function (idx, field) {

    var $ctrl = $form.find(':input').filter(function(){ return this.name === field.name; });
    var value = field.value;
    var type = $ctrl.attr('type') ? $ctrl.attr('type') : 'text';

    switch (type) {
      case "radio":
      case "checkbox":
        $ctrl.each(function(){
          var $this = $(this);
          if( $this.val() === value ){
            $this.prop('checked', true);
          }
        });
      break;
      default:
        $ctrl.val( value );
      break;
    }

  });

};