如何从页面加载后添加的元素中检索输入值?

时间:2014-02-27 20:32:21

标签: javascript php jquery html zend-framework

我正在使用Zend Framework 1.12,我需要能够动态添加和删除子表单中的字段,在这种情况下,我们将超链接与父级“促销”相关联。

我还没有找到通过Zend动态添加和删除元素的方法,而且我发现声称这样做的罕见教程已有五十年历史,并且在我尝试时无效。

所以我正在做的是在Zend Hidden输入字段中存储我需要使用的链接,然后在提交后处理JSON数据。效率不高,但到目前为止,这是我唯一能做的工作。

以下是我正在使用的代码部分:

假设表格如下:

<form action="/promos/edit/promo_id/15" method="POST" id="form_edit">
   <!-- input is Zend_Form_Element_Hidden -->
   <input type="hidden" id="link_array" value="{ contains the JSON string }"/>

   <button id="add_link">Add Link</button>
</form>

目的是每次按下“添加链接”按钮时,表单都会添加字段以允许用户输入将与特定项目关联的新超链接。

这是功能:

// add links
$('#add_link').click(
    function(e) {
        e.preventDefault();
        link = '<div class="p_link new_link">' +
                  '<div class="element_wrap">' +
                  '<label for="link_name" class="form_label optional">Text: </label>' +
                  '<input type="text" id="new_link_name" name="link_name"/>' +
                  '</div>' +
                  '<div class="element_wrap">' +
                  '<label for="link_http" class="form_label optional">http://</label>' +
                  '<input type="text" id="new_link_http" name="link_http"/>' +
                  '</div>' +
                  '<div class="element_wrap">' +
                  '<button class="submit delete_link">Delete</button>' +
                  '</div>' +
               '</div>';

        $('#add_link').prev().after(link);
    }
);

现在,我需要做的是在每个new_link类元素的提交中,获取链接名称和http引用并将其放在json对象中。这是我到目前为止的代码(我知道此时没有表示两个输入字段):

$('#submit').click(
    function(e) {
        e.preventDefault();
        var link_array = [];

        var new_links = document.getElementsByClassName('new_link');
        $.each(new_links, function() {
            console.log(this);
            var n = $(this).children('#new_link_name').text();
            console.log(n);
            link_array.push({'link_name':n}); //'link_http':h
        });
        console.log(JSON.stringify(link_array));
    }
);

我的问题是:var new_links = document.getElementsByClassName('new_link');将收集所有新添加的new_link元素,但它不会提取已输入文本字段的任何值。

我需要知道如何将我输入的任何输入绑定到输入字段的value属性,因为现在我输入这些新元素的任何内容都会被抛出,当字段显示为空时,它就是空的。

1 个答案:

答案 0 :(得分:1)

$('#submit').click(
    function(e) {
        e.preventDefault();
        var link_array = [];

        var new_links = $('.new_link');
        $.each(new_links, function() {
            console.log(this);
            var n = $(this).find('input').val(); // you need input values! This line //is changed...
            console.log(n);
            link_array.push({'link_name':n}); //'link_http':h
        });
        console.log(JSON.stringify(link_array));
    }
);

JSFIDDLE: http://jsfiddle.net/DZuLJ/

编辑:您不能拥有多个IDS(为每个输入和目标类创建类,如果您想要链接名称和http)