Microsoft CRMを変更して読み取り専用フィールドを灰色で表示せずに読み取り専用にするという要求があります。 DOMを調べることで、ラジオコントロールが無効に設定されていることがわかりました。この要求を達成するために、アプリケーションがhtmlをどのように生成しているかを変更する能力はありません。しかし、私はフォームのonloadイベントでjavascript関数を実行する能力を持っています。私はいくつかのアプローチを試しました。最近、jQueryを使用して無効な属性を削除し、ユーザがラジオの値を変更しようとするとラジオにイベントハンドラをアタッチしてみました。無効にするラジオボタンがグレー表示されないようにする(読み取り専用として動作する)
このアプローチを使用すると、ユーザーがクリックしたコントロールで変更イベントが発生することがわかりましたが、同じグループ内の別のラジオボタンの選択によって選択解除されたラジオボタンでは発生しません。
arroundを取得するには、ページがロードされたときにチェックされたかどうかを記録するすべてのラジオコントロールにカスタムプロパティを書き込んだ後、カスタム属性を持つすべてのラジオボタンでチェックされたプロパティをリセットするイベントハンドララジオボタンの変更イベントが発生するたびに元の値になります。しかし、この方法は私のために働いていません。私は私のアプローチを示すサンプルアプリケーションを含めるつもりです。私は自分のコードを修正したり、異なるアプローチを使ってこれらのニーズを満たすのを助けてくれてありがとう。
私が思いつくすべての解決策について、要件をもう一度言いたいと思いました。
- ソリューションはIEにのみ書き込む必要があります。
- 私は生成されたHTMLを制御することはできず、JavaScriptのみを書き込むことができます。
- 無効に設定されているフィールドは、グレー表示ではなく黒で表示する必要があります。
ユーザーは、これらのフィールドの値を変更できないようにする必要があります。
<script src="js/jquery.1.6.4.min.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function() { //Set custom attribute for disabled checked radio's $('input:radio:disabled:checked').attr('custom:bmiChecked', "true"); //set custom attribute for disabled unchecked radio's $('input:radio:disabled:not(:checked)').attr('custom:bmiChecked', "false"); //select disabled radio's and then filter to radio's that have the custom attribute set $('input:radio:disabled').filter(function() { return $(this).attr('custom:bmiChecked'); }).each(function() { //attach a click event handler $(this).click(function() { //In the event handler select all radio's that have the bmiChecked attribute $('input:radio').filter(function() { return $(this).attr('custom:bmiChecked'); }).each(function() { //For each of these radio's set their checked property to the original value from the page load. if ($(this).attr('custom:bmiChecked') == "true") { $(this).attr('checked', "").css({ 'border': '5px solid green' }); } else { $(this).attr('checked', "checked").css({ 'border': '5px solid red' }); } }); }); }); //remove all the disabled properties from radiobutton's $('input:radio:disabled').prop('disabled', false); }); </script> <input name="rad_new_bitfield2options" tabindex="1090" class="ms-crm-RadioButton" disabled="" id="Radio2" style="margin-left: 0px;" type="radio" value="1" checked="checked" /> <input name="rad_new_bitfield2options" tabindex="1090" class="ms-crm-RadioButton" disabled="" id="Radio3" type="radio" value="2" />
私はこのことを心配していますが、UI/UXの観点からは混乱していますが、ユーザーはまだ変更を加えることができます(少なくともフォーム要素とやりとりすることができます)。それ以外の場合、これは良い回避策です:) – cdeszaq
"対話"とは、要素を選択したり、マウスオーバーなどをすることを意味します(例えば、それらは相互に作用することができるように_look_) – cdeszaq
私はあなたに完全に同意します視点)。 OPクライアントは、フォームがアクティブなように見えるようにしたいと思う...私はいつか私の意志に完全に似たようなことをしなければならなかった。エンドユーザーが印刷できるようにフォームがアクティブに見えるはずだと言われました。 Go figure ...:D。 –