2016-01-13 36 views
-1

我有一个选择框包含在表中的每一行 - 我想允许用户更改该选择框的值,而不需要触发更新MySQL重新加载页面等更新数据库从更改表中选择

我已经能够得到这个使用Ajax的工作,当有一个行,但当他们是多行时,因为jQuery无法知道哪个id或类我指的是多个存在。

当用户更改tr id中的select时,我想将tr id传入行并将选定的阶段传入val,以便我可以通过Ajax将其更新(例如1,3),然后if他们更新第2行中的选择,例如它应该发送2,1。

HTML

<table> 
<tr id="1"> 
<td> 
<select name="dropdown" class="stage"> 
<option value="1">Stage 1</option> 
<option value="2">Stage 2</option> 
<option value="3">Stage 3</option> 
</select> 
</td> 
</tr> 
<tr id="2"> 
<td> 
<select name="dropdown" class="stage"> 
<option value="1">Stage 1</option> 
<option value="2">Stage 2</option> 
<option value="3">Stage 3</option> 
</select> 
</td> 
</tr> 
</table> 

然后jQuery中我使用:

$(document).on('change', '.stage',function(e) 
{ 
    var row = $(".stage").parent("tr").attr("id"); 

    var val = $('.stage').val(); 
    e.preventDefault(); 

    console.log(row); 
    console.log(val); 

    $.ajax({ 
     url:'updateStage.php', 
     type:'post', 
     data: {"row": row,"stage": val} 
    });    

}); 

然后在updateStage.php我正在为行和Val的岗位价值和更新MySQL的 - 我还没有包括只要我能得到传递给它的正确值,它就能正常工作。

当我改变选择,在控制台我见下文:

undefined 
3 

这指向没有得到TR的ID,而且当我改变了第二选择,这并不总是更新到正确的值,但取而代之的是第一次选择的值。

+0

你必须使用'VAR行= $(本).parent( “TR”)ATTR( “ID”);'和'$(本).val();' –

+0

为什么downvote? – bhttoan

回答

1

变化

var row = $(".stage").parent("tr").attr("id"); 

var row = $(this).parents("tr").attr("id"); 
+0

非常好!这是对我有用 - 现在工作,谢谢 – bhttoan

+0

,欢迎您。请标记为正确答案。 –

+0

这不会工作,如果你有嵌套表 – musicvicious

0

更改您的HTML如下

<tr data-id="1"> 
<td> 
<select name="dropdown" class="stage"> 
<option value="1">Stage 1</option> 
<option value="2">Stage 2</option> 
<option value="3">Stage 3</option> 
</select> 
</td> 
</tr> 
<tr data-id="2"> 
<td> 
<select name="dropdown" class="stage"> 
<option value="1">Stage 1</option> 
<option value="2">Stage 2</option> 
<option value="3">Stage 3</option> 
</select> 
</td> 
</tr> 

改变你的jQuery如下

var row = $(this).closest("tr").data("id"); 
+0

仍然没有定义行 – bhttoan

+0

@bhttoan你有没有注意到'tr'的更改,我更新了'data-id'中的'id'值,'jQuery'中改变了'$('。stage')'到'$(this )' – Butterfly

+0

@bhttoan尝试更新一个。而不是'parent()'尝试'closest()' – Butterfly

0

,你必须使用

//you are accessing current change element then use "this" 
var row = $(this).parents("tr:first").attr("id");` 

//var val = $('.stage').val(); 
var val = $(this).val(); 
+0

我仍然没有定义行 – bhttoan

+0

@bhttoan请检查更新 –

0

var row = $(".stage").parent("tr")让你直接父。

你真正想要的是

var row = $(this).closest("tr").attr('id');

相关问题