0

我有一段 JS,通过单击按钮将以下内容附加到 Web 表单中。单击div 时,会删除.remove最近的div。new-attribute它工作正常。

<div class="new-attribute">
    <h3>New Attribute</h3>

    <label for="attributeName3">Name:</label>
    <input class"attribute"="" type="text" name="attributeName3">

    <label for="attributeType3">Type:</label>
    <select id="t" class="attribute" name="attributeType3">
        <option value="text" selected="">Text</option>
        <option value="checkbox">Checkbox</option>
        <option value="select-list">Select Option List</option>
        <option value="notes">Notes</option>
    </select>

    <div class="option"></div>
    <div class="remove">Delete</div>
</div>

在 div“选项”中,我有代码在选择输入中选择“选择列表”时添加另一个表单字段。这没用。我不知道为什么。没有变量名发生冲突。我离开了,我不应该给选择一个 id,因为它是经常性的,我只想让它在我使其合规之前工作。

这是我遇到问题的Js:

//select temp
var select="<div class=\"new-option\">"
    + "<h3>new option</h3>"
    + "<label for=\"attributeName"+count+"\">New otion:</label>"
    + "<input class\"attribute\" type=\"text\" name=\"attributeName"+count+"\">"
    + "</div>";

//get value of select
$('#t').change(function() {
    var selectVal = $('#t :selected').val();
    if (selectVal == "select-list") {
        $(this).closest('.option').append(select);
    }   
});

该代码适用于$(select).appendTo('.option'); 但是它将代码附加到页面上“选项”类的每个实例。我只希望它附加到当前或最近的一个。

先感谢您

4

3 回答 3

3

问题是因为closest()在 DOM 中查找与选择器匹配的最近的父元素,但.option它是#t. 尝试next()改用:

$('#t').change(function() {
    if ($(this).val() == "select-list") {
        $(this).next('.option').append(select);
    }   
});
于 2013-08-31T13:57:24.707 回答
0

尝试这个

http://jsfiddle.net/7WC4G/1/

$('#bob').change(function(){
    $('#nuform').append('<p>your new form here</p>');
});
于 2013-08-31T13:55:09.597 回答
0

避免使用 next, prev,因为如果您更改顺序,它可能会失败。而是尝试在代码中使用兄弟姐妹而不是最接近的:

$(this).siblings('.option').append(select);

在此处阅读更多信息:http: //api.jquery.com/siblings/

于 2013-08-31T13:57:25.427 回答