1

SELECTJavaScript やその他の入力ソース (ドロップダウン ボックスなど) を使用してステートメントを変更できるようにする必要があります。以下のコードに時間を費やしましたremoveOpt().ready()しかし、私はそれを関数として機能させたり、変更されたときに呼び出されて実行されたりするのに苦労しましたdropdown1

関数が変数、特に変数のメモリを保持する必要もありますall_Opt。これは、その中にあるものを再設定できるようにする必要があるためです。以下に試したことを載せておきます。removeOpt変数/関数は、で直接使用すると機能.ready()しますが、関数に入れると正しく機能しないようで、. ではまったく機能しません.change()


要するに、これは私がやろうとしていることであり、助けが必要です:

  • 関数 removeOpt が有効かどうかを判断するか、有効なメソッドを見つけます
  • removeOptとの両方.ready()で実行したdropdown1( ?を使用.change())
  • Make all_Optin myFuncstatic (クロージャーメソッドを試す)

どんな助けでも大歓迎です!


Java スクリプト

(注: の行は、 のコードが で 機能する//CODE IN QUESTION ことをテストおよび検証した後に追加されました 。)removeOpt() .ready()

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
</script>
<script>
  //Create 'removeOpt' function
  var removeOpt = $(function() //CODE IN QUESTION
  {
    var regex_str = "^" + $("#prefix_select").val() + "-";
    var dd1 = $("#dropdown1 option");

    //Clone the 'None', Current, and All options into respective variables.
    //All options are stored in order to allow different selection criteria
    if(typeof all_Opt === 'undefined'){  //Used if all_Opt is a static variable
        alert("defining 'all_Opt'");
        var all_Opt  = dd1.clone(true);
    }
    else{alert("not defining 'all_Opt'");}
    var none_Opt = dd1.filter(":contains(None)").clone(true);
    var cur_Opt  = dd1.filter(function(){
        return $(this).text().match(regex_str);
    }).clone(true);

    //Remove all options and replace the 'None' and Current options
    dd1.remove();
    noneOpt.appendTo($("#dropdown1"));
    curOpt.appendTo($("#dropdown1"));
  })(); //CODE IN QUESTION

  //Setup .ready() and .change()
  $(document).ready(removeOpt());  //CODE IN QUESTION
  $("#dropdown1").change(removeOpt());  //CODE IN QUESTION
</script>

ドロップダウン

<!-- Used to limit options in "dropdown1" -->
<p>
<SELECT id="prefix_select">
  <OPTION VALUE="AB" >AB</OPTION>
  <OPTION VALUE="BB" >BB</OPTION>
  <OPTION VALUE="ABB">ABB</OPTION>
</SELECT>
</p>

<!-- Is produced SERVER side and cannot be changed -->
<p>
<SELECT ID="dropdown1">
  <OPTION VALUE=""    >None</OPTION>
  <OPTION VALUE="1000">AB-Item 1 Description</OPTION>
  <OPTION VALUE="2001">AB-Item 2 Description</OPTION>
  <OPTION VALUE="50"  >AB-Item 8 Description</OPTION>
  <OPTION VALUE="70"  >BB-Item 3 Description</OPTION>
  <OPTION VALUE="100" >BB-Item 5 Description</OPTION>
  <OPTION VALUE="2"   >ABB-Item 4 Description</OPTION>
</SELECT>
</p>
4

2 に答える 2

5

それを渡します。それを呼び出さないでください。

$(document).ready(removeOpt);
$("#dropdown1").change(removeOpt);

そして、構文を取り除き$(...)()ます。

// remove-----------vv
  var removeOpt = /*$(*/function()
  {
    var regex_str = "^" + $("#prefix_select").val() + "-";
    var dd1 = $("#dropdown1 option");

    if(typeof all_Opt === 'undefined') {
        alert("defining 'all_Opt'");
        var all_Opt  = dd1.clone(true);
    }
    else{alert("not defining 'all_Opt'");}
    var none_Opt = dd1.filter(":contains(None)").clone(true);
    var cur_Opt  = dd1.filter(function(){
        return $(this).text().match(regex_str);
    }).clone(true);

    dd1.remove();
    noneOpt.appendTo($("#dropdown1"));
    curOpt.appendTo($("#dropdown1"));
  }//)();
 //  ^^^--------remove

あなたがしていたことは、関数を$関数に渡すことでした。関数はそれをに渡し.ready()ます。しかし、返された jQuery オブジェクトを関数であるかのように呼び出そうとしました。

于 2013-03-13T16:20:46.757 に答える
1

以下は誤りです。

 $(document).ready(removeOpt());  //CODE IN QUESTION
 $("#dropdown1").change(removeOpt());  //CODE IN QUESTION

ここで関数を で呼び出す必要はありません()。これを行うだけです。

$(document).ready(removeOpt);
$("#dropdown1").change(removeOpt);
于 2013-03-13T16:20:29.563 に答える