0

以下に示すPHP & JS関数は連携して、1)配列から要素を取り込み、2)一致するdbselect値を事前に選択し、 3) の要素の値を操作します。optionsselectoptionsfocus

PHPヘルパー関数は JS 関数と連携して動作し、db focus値に接尾辞「_default」が含まれている場合は文字列値を操作しますが、オプション/文字列値にドル記号 (「$」) が含まれている場合にのみトリガーされます。これを必要とするコードは何もありませんが、すべての可能性をテストしましたが、それが唯一の原因であると思われます。

http://click2fit.com/sample_php_select.phpに、コードを組み合わせた機能例を投稿しました。select実際の問題を確認するには、どちらの要素にも焦点を合わせずに [送信] ボタンをクリックします。これにより、「デフォルト」値を持つecho2 つの要素 (ドル記号のあるものとないもの) の値が投稿されます。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 で最も一般的に選択されるオプションを事前に選択しています。この関数を使用して、これらの値がまだ初期の事前選択/デフォルト状態にある場合と、ユーザーがフォーム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 に答える