在ajax返回时绑定onChange

时间:2015-06-15 06:23:44

标签: javascript jquery ajax event-handling

我正在替换我对ajax回调的选择。在下拉列表中,我看到了返回的列表,但是当我尝试绑定更改事件时,它给了我不正确的值。警报显示我"值未定义",当我在下拉列表中更改所选选项时,如何查看正确的值?

如果我的下拉列表中包含值(" value1"," value2"," value3"),如果我选择" value1",警报应该显示我"值是值1"。

if (status == "success") {

    var mysel = $('#Namelist').empty();


    for (var i = 0; i < data.length; i++) {
        mysel.append('<option value="' +
            data[i] + '">' +
            data[i] + '</option>');
    }

    $("#Namelist").replaceWith(mysel);
    $('#Namelist').bind('change', function () {
        alert('Value change to ' + $(this).attr('value'));
    });
}

4 个答案:

答案 0 :(得分:2)

您应该尝试获取val()而不是attr('value')

<强> DEMO

$('#Namelist').bind('change', function () {
        alert('Value change to ' + $(this).val());
});

答案 1 :(得分:1)

替换

$("#Namelist").replaceWith(mysel);

$("#Namelist").append(mysel);

然后,您不必在event之后再次#Namelist ajax

完整代码

if (status == "success") {
    var options = '';

    for (var i = 0; i < data.length; i++) {
        options += '<option value="' + data[i] + '">' + data[i] + '</option>';
    }

    $("#Namelist").html(options);
}

// Outside of ajax function
$('#Namelist').on('change', function () {
    alert('Value change to ' + $(this).val());
});

答案 2 :(得分:1)

<select>元素通常没有名为value的属性。要获取此类元素的选定值,您需要查询其.value属性。

jQuery有一个方便的包装器,名为.val()

$('#Namelist').bind('change', function () {
    alert('Value change to ' + $(this).val());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="Namelist" />

我建议只在页面中绑定一次更改处理程序,例如当DOM准备就绪时:

jQuery(function($) {
    // attach change handler here
});

多次注册同一个事件处理程序几乎总是不是你想要的。

此外,您不需要此电话:

$("#Namelist").replaceWith(mysel);

到那时,select元素已经填充了AJAX响应中的所有选项。

答案 3 :(得分:0)

提示从ajax回调中删除onChange事件是好的。

Moved the $('#Namelist').on('change',function () {} from ajax callback 

to jQuery(function($) {}); 



 $('#NameList').on('change', function () {
                alert('Value changed to ' + $(this).val());
  });