尝试在选择更改操作上传递变量

时间:2018-01-25 22:23:22

标签: php jquery duplicates

我正在尝试对选择字段进行动态数据库更新,但此字段的页面上可能有多个实例。我有一个改变选择字段更改的单一工作,但有多个我只是传递第一个的值。

我过去曾经在页面上为这些创建了独特的DOM ID,但在这个实例中使用了select字段并使用了更改函数,我有点糊涂了。我在搜索时遇到的大多数情况都不是选择字段或以这种方式处理传递变量。我完全清楚这是粗糙的,可能有更好的方法来完成这项任务。

$('.preferenceData').change(function(){
    $.ajax({
        type: 'POST', 
        url: "save_preferences.php", 
        data: {data1: $('.preferenceData').val(), data2: $('#userID').val()}, // this second data element not really needed but is passing var
        dataType: 'text',
        success: function(html){
            if(html) {
                $("div#updateDisplay").replaceWith('<div id="updateDisplay">' + html + '</div>');
        }
    })
});

表格位:

            echo '<div id="userPref"><select class="preferenceData" name="preferenceData'.$row['uid'].'">';

                $prefs = enum_select($db,'db_table_name','email_preferences');

                foreach($prefs as $pref)
                {
                    echo '<option value="'.$pref['value'].'-'.$data['topicid'].'-'.$row['uid'].'"'.($row['email_updates'] == $pref['value'] ? ' selected' : '').'>'.$pref['display'].'</option>';
                }

                echo '</select></div>';

它传递给的函数:

function save_preferences()
{
    if ( !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' )
    {
        $db = new db(0);

        $vars = $_POST['data1']; 
        $data = explode("-", $vars); 

        // Update Database
        $data = $db->Exec('UPDATE km_vendors_users SET email_updates = "'.$data[0].'" WHERE vid = "'.$data[1].'" AND uid = "'.$data[2].'"');

        if($data==false)
        {   
            echo $db->log;
            //return false;
        }
        else
            echo '<img src="/images/icons/success_check_animated.gif">';
    }
}

1 个答案:

答案 0 :(得分:0)

对于您的代码,您尝试将$('.preferenceData').val()传递给data1,这将是非常意外的结果(通常不是值)。

相反,您可以使用$(this).val()来引用已更改的特定元素及其值。

$('.preferenceData').change(function(){
    $.ajax({
        type: 'POST', 
        url: "save_preferences.php", 
        data: {data1: $(this).val()},
        ...etc...
    });
});