PHP &下面显示的 JS 函数协同工作1)从数组中填充select
个元素2)预先选择与 db 值匹配的options
,以及3 )在select
上操纵options
元素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
个元素,并且正在使用此函数来区分这些值何时仍处于其初始预选/默认状态与用户在关注表单元素后主动选择该值之间的区别。
答案 0 :(得分: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代码中遇到很多问题,我担心你会让它变得比实际上更复杂。
答案 1 :(得分:0)
在您的示例页面上找不到option
,因为最初没有其值中包含_default
的选项。你需要设置一个从开始或编辑你的JS,以包括一个选项,当没有找到选项时:
var option = $(this).find("option[value*=default]") || $(this).find("option:first-child");
但说实话,我不知道你试图用这段代码实现什么。