0

下面显示的PHPJS函数一起工作,以 1) 从数组中填充select元素 2) 预先选择options匹配的db值,以及 3) 操作select元素optionson的值focus

PHP帮助函数与JS 函数协同工作,focus如果 db 值包含后缀“_default”,则它会操作字符串值,但只有在选项/字符串值包含美元符号 (“$”) 时才会触发它。代码中没有任何东西需要这样做,但我已经测试了所有可能性,这似乎是唯一导致它的原因。

我已经在http://click2fit.com/sample_php_select.php发布了一个带有组合代码的功能示例。要查看实际问题,请单击“提交”按钮而不关注任一select元素,它将echo发布两个select具有“默认”值的元素的值——一个带有美元符号,一个没有。为了演示问题,我对这些值进行了硬编码,而不是从db中获取它们。另外,我在这里发布了一个带有JS功能的小提琴http://jsfiddle.net/chayacooper/JHAPp/6/

PHP 和 HTML

<?php
// Helper function that replaces a key while maintaining the entry's position in the array. It does not modify the given array, but returns a new array.
function replaceKey($array, $oldKey, $newKey) {
    $newArray = array();
    foreach ($array as $key => $value) {
        $newArray[($key === $oldKey) ? $newKey : $key] = $value;
    }
    return $newArray;
} 
// Function to select the option matching the value in the db
function printSelectOptions($dataArray, $currentSelection) {
    foreach ($dataArray as $key => $value) {
        echo '<option ' . (($key == $currentSelection) ? 'selected="selected"' : '') . ' value="' . $key . '">' . $value . '</option>';
    }
}
  try {  
    $stmt = $conn->prepare("SELECT * FROM price WHERE user_id = :user_id");  
    $stmt->bindValue(':user_id', $user_id); 
    $stmt->execute();
}  catch(PDOException $e) {echo $e->getMessage();}
$row = $stmt->fetch();
$search_default = array('_default');
$replace_default = array('');
$row_default = str_replace($search_default, $replace_default, $row);
?>

<select name="importance" id="importance">
<?php
    // Generates a <select> element with the options specified in this array
    $options = array("1"=>"1", "2"=>"2", "3"=>"3", "4"=>"4", "5"=>"5");
    // If these are different then the value from the database includes "_default"
    if ($row_default['importance'] !== $row['importance']) {
        // Change the key for the entry in $options so it includes "_default" 
        $options = replaceKey($options, $row_default['importance'], $row['importance']);
    }
    $selected = $row['importance'];
    // Pre-selects the option matching the db information
    echo printSelectOptions($options, $selected);
?>
</select>   

JS函数

 $(function () {
     $('select').focus(function () {
         var option = $(this).find("option[value*=default]");
         option.attr('value', option.attr('value').replace(/_default/g, ''));
     });
 });

JS函数的用途

我正在为 apx 预先选择最常用的选项。300 个select元素,并使用此功能来区分这些值何时仍处于初始预选/默认状态与用户在关注表单元素后主动选择该值的时间。

4

2 回答 2

1

option没有任何价值,replace也不能很好地与 jQuery 一起使用。

改变这个:

$(function () {
  $('select').focus(function () {
     var option = $(this).find("option[value*=default]");
     option.attr('value', option.attr('value').replace(/_default/g, ''));
  });
});

对此:

$(function () {
  $('select').focus(function () {
    var default_option = $("option[value*=default]"); // Just added this part to a variable, for easy of use.
    var option = default_option.val(); // Got the option value that contains the word default.
    // This will replace the '_default' with '' and assign the new value to the option
    default_option.val(function(index, value) {
      return value.replace(/_default/g, '');
    });
  });
});

但是javascript不是你唯一的问题。你的 php 代码有很多问题,恐怕你把它弄得比实际更复杂。

于 2013-04-14T21:11:39.893 回答
0

在您的示例页面option上找不到,因为最初没有选项具有_default其价值。您需要从一开始就设置一个或编辑您的 JS 以包含一个选项,当没有找到选项时:

var option = $(this).find("option[value*=default]") ||  $(this).find("option:first-child");

但老实说,我不知道你想用这段代码实现什么。

于 2013-04-14T21:14:46.110 回答