在Ajax Call之后为父母的孩子的兄弟姐妹设定价值

时间:2016-04-05 08:13:10

标签: javascript jquery html css ajax

我在两个DIV下有一个下拉列表。在更改值时,我正在发出AJAX请求。之后我得到了价值并存储在一个变量中。现在我需要将接收到的值设置为当前DIV的父级父级兄弟姐妹。请参阅以下代码。

<div class="parentcontainer">
<div class="ui-block-a">
    <div class="psFieldLabel">Attendee</div>
    <div class="psFieldInput">
        <select name="namelist" id="nameListId" maxlength="50" class="required attendeeName">
            <option></option>
            <option value="Hari">Hari</option>
            <option value="Ramesh">Ramesh</option>
            <option value="Kumar">Kumar</option> 
        </select>
    </div>                                 
</div>
<div class="ui-block-b">
    <div class="psFieldLabel">Description</div>
    <input type="text" name="descriptionName" id="descriptionId" value="0" class="psName description" />
</div>
</div>

在我的Javascript中: on&#34;参与者名称&#34; select class我正在进行Ajax调用并获得价值。但我无法将收到的值推送到&#34; descriptionName&#34;类。

注意:在按钮上单击我将动态多次生成上述标记(&#34; parentcontainer&#34;类)。因此,每当我更改下拉值时,都应更新相应的描述值。但不是在下一个&#34; parentcontainer&#34;。

试过这个,但它不起作用:

$(this).parent().parent().siblings(".description").val(ajaxResult);

2 个答案:

答案 0 :(得分:3)

在此代码中

$(this).parent().parent().siblings(".description").val(ajaxResult);

正如您所提到的,您在ajax成功中这样做,此处$(this)不会指向您更改的下拉列表。所以这就是你能做的。

创建一个变量来存储触发更改事件的下拉列表,然后导航到父父级并执行您的操作。喜欢这个

   var $dropdown= $(this); // inside your change event save the dropdown into a variable.
   $.ajax({
     ...
     ...
     success: function(ajaxResult){
       $dropdown.parent().parent().siblings(".description").val(ajaxResult); 
       // navigate from the dropdown.
     }
   });

也是一个指针:如果标记中输入的id是唯一的,那么您可以直接执行此操作。 $('#descriptionId').val(ajaxResult)

答案 1 :(得分:2)

对于我的回答,我猜$(this)是选择。

你有什么问题,请看:

<!-- PARENT 3 -->
<div class="parentcontainer">
    <!-- PARENT 2 -->
    <div class="ui-block-a">
        <div class="psFieldLabel">Attendee</div>
        <!-- PARENT 1 -->
        <div class="psFieldInput">
            <select name="namelist" id="nameListId" maxlength="50" class="required attendeeName">
                <option></option>
                <option value="Hari">Hari</option>
                <option value="Ramesh">Ramesh</option>
                <option value="Kumar">Kumar</option> 
            </select>
        </div>                                 
    </div>
    <div class="ui-block-b">
        <div class="psFieldLabel">Description</div>
        <input type="text" name="descriptionName" id="descriptionId" value="0" class="psName description" />
    </div>
</div>

您只拨打parent()两次:

$(this).parent().parent().siblings(".description").val(ajaxResult);

尝试再次致电parent()

您还应该将.siblings替换为.find,因为说明字段不是parentContainer的直接兄弟

修改

正如Reddy所提到的,如果你在ajax回调中进行编码,你应该使用select的引用而不是$(this),因为在回调中,this指的是回调函数: / p>

var select = $(this);
$.ajax({
     // some arguments
     // ....
     success: function(ajaxResult){
        select.parent().parent().parent().find(".description").val(ajaxResult);
     }
   });