0

ドロップダウン リストの最初の項目が選択されたときにポップアップ ウィンドウを開くこのコードがあります。

<select id="selectItem">
    <option value="newItem">Load new item...</option>
    <option value="ddsds">first item  </option>
</select>
$(document).ready(function(){  
    $("#selectItem").change(function(){
        if($(this).prop("selectedIndex") == 0){
            window.open('popup.html', '_blank', 'scrollbars=1, height=600, width=500');
        }
    });
 }); 

jsフィドル

最初のアイテムとは異なるアイテムを選択すると、最初のアイテムを選択するとポップアップ ウィンドウが開きます。

ただし、最初の項目が選択されていても、他の項目を選択していない場合、ポップアップ ウィンドウは起動しません。

何が起こっているのかわかりません。最初のオプションが選択されたときにポップアップを開くようにjQueryに正しく指示するにはどうすればよいですか?

編集:

change イベントを誤解していました。多くの人が言及したように、選択が変更されていない場合、ポップアップは起動しません。ボタンを使用して、現在の「ビジネス ロジック」を置き換えるかもしれません。

4

5 に答える 5

2

Andy Rayがコメントしたように-これは変更イベントの予想される動作です-選択が変更されていない場合は発生しません。

1 つのオプションは、デフォルトで「新規ロード」が選択されないように、単にオプション (しゃれは意図されていません) を選択に追加することです。

html

<select id="selectItem">
    <option selected>please pick</option>
    <option value="newItem">Load new item...</option>
    <option value="ddsds">first item  </option>
</select>

js

$("#selectItem").change(function () {
    if (this.value === "newItem") {
        window.open('popup.html', '_blank', 'scrollbars=1, height=600, width=500');
    }
});

http://jsfiddle.net/wVRHY/6/

しかし - あなたのフォームが何をすべきかによっては、おそらく<button>「新しいロード...」機能を使用したほうがよいと思います

于 2012-10-14T22:01:30.780 に答える
1

ページがロードされたときに実行されるように、changeイベントの外部にもwindow.openメソッドを追加する必要があります。

    $(document).ready(function(){  
    $("#selectItem").change(function(){
            if($(this).prop("selectedIndex") == 0){
                window.open('popup.html', '_blank', 'scrollbars=1, height=600, width=500');
            }
        });
    if($("#selectItem").prop("selectedIndex") == 0){
                window.open('popup.html', '_blank', 'scrollbars=1, height=600, width=500');
            }
 }); 

http://jsfiddle.net/wVRHY/2/

于 2012-10-14T21:49:26.523 に答える
1

loadページがロードされたら、イベントを使用してオプションのステータスを確認する必要があります。または、手動triggerで change イベントを使用することもできます。

http://api.jquery.com/load-event/

http://api.jquery.com/trigger/

于 2012-10-14T21:52:15.700 に答える
1

情報:明らかに、最初の項目をクリックしたときにポップアップを表示すべきではありません。そうしないと、ユーザーが他のすべてのオプションを表示する方法がないからです。その結果、次のコードを使用すると、最初のオプションをクリックしてすべてのオプションを表示できるようになり、最初の項目を選択すると、必要に応じて機能します。

解決:

var cc = 0;

$('#selectItem').click(function ()
{
  cc++;

  if (cc == 2) 
  {
    $(this).change();
    cc = 0;
  }
}).change(function (){
  if ($(this).prop("selectedIndex") == 0)
  {
    window.open('popup.html', '_blank', 'scrollbars=1, height=600, width=500');
  }

  cc = -1;
});

クレジット: 「Vega's Answer」からほとんどのコードを取得し 、回答に合わせてコードを追加しました。

于 2012-10-14T22:42:54.297 に答える
1

実際にあなたの例では、blur()の代わりに使用するchange()とうまくいきます。

$("#selectItem").blur(function(){
        if($(this).prop("selectedIndex") == 0){

ここのjsfiddle http://jsfiddle.net/wVRHY/8/

于 2012-10-14T22:04:59.497 に答える