【问题标题】:Trying to have pass variables on select change action尝试在选择更改操作上传递变量
【发布时间】:2018-07-05 07:01:26
【问题描述】:

我正在尝试对选择字段进行动态数据库更新,但该字段的页面上可能有多个实例。我让这适用于单个更改选择字段更改,但不止一个,我只是传递第一个的值。

我过去处理过在页面上为这些创建唯一的 DOM id,但在这种情况下,使用选择字段并使用更改功能我有点困惑。此外,我在搜索时发现的大多数情况都不是选择字段或以这种方式处理传递变量。我完全知道这是粗略的,并且可能有更好的方法来完成这项任务。

$('.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">';
    }
}

【问题讨论】:

  • 我想你会希望 $('.preferenceData').val() 在设置 data 时成为 $(this).val() ...你也错过了 } 的结尾 if (html) { 块。
  • 谢谢!括号在这里只是一个错字,但 $(this).val() 是诀窍。现在我只需要将同样的问题应用到更新图像上,我就差不多完成了。耶! :)
  • 当附加一个事件到一个类时,$(this) 在这种情况下变成了一个神奇的对象。玩得开心,祝大家好运!
  • 我假设您不太关心评级的东西,但如果不随意提交它作为答案,我会很明显地投票。再次感谢! 〜吉姆
  • 我没有将它作为真正的解决方案发布,因为我不确定这是否是您遇到的唯一问题。但是,既然你说它正在工作,我已经发布了它,所以你可以提交你的问题完成:)

标签: php jquery duplicates


【解决方案1】:

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

您可以改为使用$(this).val(),它指代已更改的特定元素及其值。

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

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 2017-01-25
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2012-07-01
    相关资源
    最近更新 更多