4

javascriptを使用したselectタグのechoステートメントとonchangeを使用しています

    echo('<select name="type"  onchange="(return location.href='.?&amp;class=.'+this.value;)" id="manage_ads">
        <option value="ads">Paid To Click Ads</option>
        <option value="banner_ads">Banner Ad</option>
        <option value="featured_ads">Featured Text Ads</option>
        <option value="featured_link">Featured Link Ads</option>
    </select>');

href=' ここで一重引用符が echo ステートメントと競合しているため、エラーが表示されます。

しかし、別のJavaScriptページで使用すると、classundefinedのエラーが発生するため、関数は正しく機能しません

function check()
{
    return location.href='.?&amp;class=.'+this.value;
}

この機能を使用できる方法はありますか

4

5 に答える 5

1

これらは通常、PHP モードにジャンプしたり、PHP モードから抜けたりするのに最適なシナリオです。

?>
<select name="type" onchange="(return location.href='.?&amp;class=.'+this.value;)" id="manage_ads">
    <option value="ads">Paid To Click Ads</option>
    <option value="banner_ads">Banner Ad</option>
    <option value="featured_ads">Featured Text Ads</option>
    <option value="featured_link">Featured Link Ads</option>
</select>
<?php

あまり使用されませんが、この戦略は関数とメソッドの範囲で実装することもできます:

function createSelectControl($name, array $options) {
    ?>
    <select name="<?= $name ?>">
        <?php 
            foreach ($options as $name => $value) {
                createSelectOption($name, $value);
            }
        ?>
    </select>
    <?php
}

function createSelectOption($name, $value) {
    ?>
        <option value="<?= $value ?>"><?= $name ?></option>
    <?php
}

要点は、PHPでecho大量の HTML (またはその他のもの) を使用しないことです。これにより、その後の避けられない見積もりの​​不一致の問題からあなたを救うことができます。

于 2013-05-11T15:44:13.530 に答える
0

あなたはそれらをエスケープするのを忘れました

echo('<select name="type"  onchange="(return location.href=\'.?&amp;class=.\'+this.value;)" id="manage_ads">
        <option value="ads">Paid To Click Ads</option>
        <option value="banner_ads">Banner Ad</option>
        <option value="featured_ads">Featured Text Ads</option>
        <option value="featured_link">Featured Link Ads</option>
    </select>');
于 2013-05-11T15:32:57.660 に答える
0

これを試してください。PHPでは、バックスラッシュを使用して一重引用符をエスケープする必要があります

echo('<select name="type"  onchange="(return location.href=\'?&amp;class=\'+this.value;)" id="manage_ads">

<option value="ads">Paid To Click Ads</option>
<option value="banner_ads">Banner Ad</option>
<option value="featured_ads">Featured Text Ads</option>
<option value="featured_link">Featured Link Ads</option>
</select>');
于 2013-05-11T15:33:25.690 に答える
0

次のように一重引用符をエスケープできます。

echo('<select name="type"  onchange="(return location.href=\'.?&amp;class=.\'"+this.value;)"  ...
于 2013-05-11T15:33:31.257 に答える
0

文字列のリテラルとして使用する単一引用符をエスケープします。このような:

echo('<select name="type"  onchange="(return location.href=\'.?&amp;class=.\'+this.value;)" id="manage_ads">
            <option value="ads">Paid To Click Ads</option>
            <option value="banner_ads">Banner Ad</option>
            <option value="featured_ads">Featured Text Ads</option>
            <option value="featured_link">Featured Link Ads</option>
        </select>');
于 2013-05-11T15:34:25.370 に答える