14

2 つの jQuery スクリプトがあります。1 つは .preventDefault を追加する前、もう 1 つは .preventDefault を追加した後の同じスクリプトのコピーです。jQuery は最初は機能しますが、.preventDefault() を追加した後は機能しません

動作する初期スクリプト

$(window).load(function(){  
       $(document).ready(function(){  
         $("span[id$='_ff5_1']").each(function() { //returns a collection of elements that must be iterated through using each
            if ($(this).text() == "Yes") { //test value returned from non-input field
                clearID(); 
                $("tr.anon").hide(); 
            } else {
                $("tr.anon").show();
            }   
         });
         if ($("select[title='action']").val() == "") {   
           $("tr.actDet").hide();      
         }
         $("select[title='organizationalElement']").focusout(function() {          
           if ($(this).val() === "I don\'t know") {             
             alert("If no organizational element is selected, additional time may be required to route this request");         
           } // close if    
            $("select[title='action']").change(function(){         
               $(".actDet").toggle($(this).val()!= "");     
            }); // close action.change
        });//close select.focusout
       }); // close doc.ready 
    }); // close window.load 

動かないスクリプト...

$(window).load(function(){  
   $(document).ready(function(){  
     $("span[id$='_ff5_1']").each(function() { //returns a collection of elements that must be iterated through using each
        if ($(this).text() == "Yes") { //test value returned from non-input field
            clearID(); 
            $("tr.anon").hide(); 
        } else {
            $("tr.anon").show();
        }   
     });
     if ($("select[title='action']").val() == "") {   
       $("tr.actDet").hide();      
     }
     $("select[title='organizationalElement']").focusout(function() {          
       if ($(this).val() !== "I don\'t know") {
         $(this).preventDefault();
       } else {             
         alert("If no organizational element is selected, additional time may be required to route this request");         
       } // close if    
        $("select[title='action']").change(function(){         
           $(".actDet").toggle($(this).val()!= "");     
        }); // close action.change
    });//close select.focusout-- close edit record stuff
   }); // close doc.ready 
}); // close window.load 

私が行った唯一の変更は、最初の if ステートメントが .preventDefault() を呼び出す if/else になることです。最初のスクリプトは問題なく動作しますが、2 番目のスクリプトは失敗します。なんで?organizationElement の値が既存のレコードの idk である場合、.preventDefault() メソッドを呼び出しています。

@Andrew: あなたの編集を明確にするために...スクリプトを次のように修正する必要があります: ...

   if ($(this).val() !== "I don\'t know") {
     $(this).click( function(e) { e.preventDefault(); } );
   } else {             
     alert("If no organizational element is selected, additional time may be required to route this request");         
   } // close if

... b/c $(this).preventDefault(); を変更すると正しく動作することに注意しました。e.preventDefault(); に

私が最初に書いたように、メソッドを $(this) オブジェクトにアタッチしたい場合、おそらくそれを書く方法を示そうとしていますか?

4

3 に答える 3

32

preventDefaultではなく、イベントオブジェクトを呼び出したいthis

$("select[title='organizationalElement']").focusout(function(e) {          
   if ($(this).val() !== "I don\'t know") {
     e.preventDefault();
   }
});

完全を期すために、この要素のデフォルトのアクションpreventDefaultを禁止していることに注意してください。たとえば、アンカーのhref属性の値にページを移動します(選択したフォーカスアウトのデフォルトのアクションが何であるか、または存在するかどうかはわかりません。 1であります)。泡立ちを防ぎ ません。preventDefault

バブリングが気になる場合(必ずしもそうする必要があるとは言えませんが)、jQueryイベントハンドラーからfalseを返すと、デフォルトのアクションが防止されるだけでなく、バ​​ブリングも防止されます。

于 2012-01-04T16:48:02.113 に答える
8

preventDefault()関数はイベントに関連付けられています。あなたが呼ぶべきものは次のとおりです。

e.preventDefault();

コメントに基づいて明確にするために編集eします。関数呼び出しに変数として追加する必要があります。

$('selector').click( function(e) { e.preventDefault(); } );

詳細については、jQueryのpreventDefaultページをご覧ください。

于 2012-01-04T16:48:32.783 に答える
5

このpreventDefaultメソッドは、実行中のDOMオブジェクトではなく、イベントオブジェクトに適用する必要があります。

コードは次のようになります。

$("select[title='organizationalElement']").focusout(function(e) {          
       if ($(this).val() !== "I don\'t know") {
         e.preventDefault();
       } else {             
         alert("If no organizational element is selected, additional time may be required to route this request");         
       } // close if    
        $("select[title='action']").change(function(){         
           $(".actDet").toggle($(this).val()!= "");     
        }); // close action.change
    });//close select.focusout-- close edit record stuff

それが役に立ったら教えてください!

于 2012-01-04T16:49:20.397 に答える