0

現在Sharepointのカスタマイズを行っていますが、特定の要素IDが選択されている場合に関数を呼び出す必要があるという問題が発生しています。問題は、Sharepointインスタンスをインストールするたびに要素IDが変更されるため、私が目指しているのは、要素IDをその「値」で識別することです。私の質問にいくつかのコンテキストを与えるために、これはhtml(変更できません)です:

<span class="ms-RadioText" title="Yes"><input id="378Ukj200" name="radio_button" value="ctl00" checked="checked" type="radio"><label for="378Ukj200">Yes</label></span>
<span class="ms-RadioText" title="No"><input id="378Ukj201" name="radio_button" value="ctl01" type="radio"><label for="378Ukj201">No</label></span>

そして、これらは現在のgetElementIDベースのステートメントです(これは、インスタンスを本番ボックスに追加すると機能しなくなります)。

document.getElementByID('378Ukj200').onclick = new Function('checkForRadioChange("Yes");');
document.getElementByID('378Ukj201').onclick = new Function('checkForRadioChange("No");');

たとえば、spanタグを使用して、これを実現するための何かを達成したいと思っていました(もちろん、これは複数の理由で機能することはありません)。

var rispan = document.getElementsByTagName('span');

for( var i = 0, j= rispan.length; i < j; i+=1 ) {
    var classes = span[i].getAttribute("title");
    if( classes ) {
       if( classes.indexOf("Yes") != -1) {
          onclick = new Function('checkForRadioChange("Yes");');
       }
       else if( classes.indexOf("No") != -1) {
          onclick = new Function('checkForRadioChange("No");');
       }
    }
}
4

4 に答える 4

1

入力はスパンの唯一の入力子であるように見えるので、以下を取得するのはかなり簡単です。

var input = rispan[i].getElementsByTagName('input')[0]
...
input.onclick = new Function ...

http://jsfiddle.net/ExplosionPIlls/Y74bn/


function () {}構文を使用して無名関数を定義する 必要があります。new Functionあなたにとってあまりうまく機能していないようです。さらに、onlick時代遅れで邪悪です!存在する場合は、を使用する必要addEventListenerがあります。それ以外の場合、attachEvent

于 2013-02-05T01:31:05.880 に答える
1

コードを固定IDのdiv内に配置してから、子を取得します。

var nodes = document.getElementByID('div_id').children;

これを使用して、ループ内でtagNameをテストし、必要な場所にonclickイベントをアタッチします。

于 2013-02-05T01:32:30.903 に答える
1

一致する構造:

<span class="ms-RadioText" title="Yes">
    <input id="378Ukj200" name="radio_button" value="ctl00" checked="checked" type="radio">
    <label for="378Ukj200">Yes</label>
</span>

入力要素のCSSセレクター:

span.ms-RadioText[title="Yes"] > input[name="radio_button"]

CSSセレクターを許可するライブラリーを使用してください。勝つ。

于 2013-02-05T01:33:06.090 に答える
1

必要な互換性のレベルはわかりませんが、最近のブラウザでは次のように簡単にできます。

var inputs = document.querySelectorAll('input[title^="ctl"]');

[].forEach.call(inputs, function(input) {
  var label = input.nextSibling;

  input.addEventListener('click', function() {
    if (label.textContent == 'Yes') {
      ...
    }
  });
});
于 2013-02-05T01:35:16.787 に答える