0

私はCMSに取り組んでいます。ユーザーが既存のサムネイル画像を置き換えたい場合は、代替画像をアップロードし、チェックボックスをオンにして、実際に画像を置き換えていることを証明できます。そうしないと、フォームが空白の値を送信し (すべてのブラウザーのセキュリティの既定値であるアップロード フィールドの既定値が空白であるため)、代替画像を指定せずに既存の画像を消去するため、チェックボックスが必要と思われます。

問題は、チェックボックスを手動でアクティブにするのを忘れ続け、アップロードされた画像が実際には既存の画像を置き換えないことです。これは、チェックボックスがチェックされていないと、受信する PHP ファイルが (設計上) アップロードされたファイル名を処理しないためです。ユーザーも同じ問題を抱えているのではないかと思います。必要な手順の数を減らすことで、これが起こらないようにしたいと考えています。1 つの解決策は、アップロード フィールドがクリックされるたびに jQuery でチェックボックスをオンにすることです。では、なぜこれが機能しないのですか:

$('#image_req').click(function () {
    if ($('#checkbox_req').attr('checked',true)) {
        $('#checkbox_req').removeAttr('checked');
        alert('Unchecked');
    } else if ($('#checkbox_req').attr('checked',false)) {
        $('#checkbox_req').attr('checked','checked');
        alert('Checked');
    }
});

問題の HTML は次のようになります。

<input id="image_req" name="local_filename" type="file" />
<input id="checkbox_req" name="replace_image" value="yes" type="checkbox" />
4

5 に答える 5

0

@アルネ

コードをすばやく実行しようとしましたが、何らかの理由で毎回チェックを外すだけです..チェックボックスを毎回チェックするようにすばやく変更しました..ボックスのチェックを外す必要はないことを理解していますよね?

$('#image_req').mouseup(function () {
    if ($('#checkbox_req').attr('checked',false)) {
        $("input[name='replace_image']").attr('checked', true);
    }
});

@ダグ:ヒントをありがとう

于 2010-05-15T21:11:47.173 に答える
0

実際には値を取得するのではなく値であるため、if 条件が正しく機能しませんassigning。これを試して:

$('#image_req').click(function () {
    var checkbox = $('#checkbox_req');
    if (checkbox.is(':checked')) {
        checkbox.removeAttr('checked');
        alert('Unchecked');
    } else {
        checkbox.attr('checked', 'checked');
        alert('Checked');
    }
});

しかし、これは意味がありますか?ユーザーが最初にボックスを手動でチェックしてからアップロードすると、再びチェックが外されます。

checkedHTMLで属性を設定することにより、デフォルトでチェックします。ユーザーが画像を置き換えたくない場合は、手動でチェックを外すことができます。

PS: このチェックボックスを常にチェックする必要がある場合は、単にチェックボックスを非表示フィールドに変更するのはどうですか?

<input id="checkbox_req" name="replace_image" value="yes" type="hidden" />

何らかの理由でこれが不可能な場合は、同じ効果を持つ別のアイデアがあります: javascript でボックスをチェックし、CSS で非表示にします。

于 2010-05-15T21:17:40.847 に答える
0

明らかな解決策であり、以前に実装した隠し入力を使用することになりましたが、今回はどういうわけか見落としていました。しかし、多様で役立つすべての回答に感謝しています。スタック オーバーフローの岩。

于 2010-05-17T14:56:19.790 に答える
0

$ が CMS の既存の JavaScript ライブラリと競合している可能性があります。選択ボックスで同様のことをしなければならず、jQuery.noConflict について知りました。

jQuery.noConflict();

jQuery(document).ready(function() {
    //preselect sectionid
    jQuery('select[name="sectionid"] option[value="29"]').attr("selected", true);
    jQuery('select[name="sectionid"] option[value="29"]').trigger("change");
    jQuery('select[name="access"] option[value="1"]').attr("selected", true);
});

「jQuery.noConflict();」の後 「$」の代わりに「jQuery」を使用できます

また、私の場合、「access」セレクトボックスのコンテンツは「sectionid」セレクトボックスで選択されているものに依存しているため、変更イベントをトリガーする必要がありました

于 2010-05-15T15:52:57.497 に答える
0

非表示の入力 ( ) にデフォルト値を含めることはできませんtype="hidden"か? そうすれば、フォームを送信するときに、デフォルト値が何であるかがわかります。何も変わらない場合は、デフォルト値を使用するか何もせず、ファイルがアップロードされた場合 (チェック$_FILES)、新しいファイルを使用します。

于 2010-05-15T15:55:44.660 に答える