2012-01-04 9 views
13

私は2つのjQueryスクリプトを用意しています.1つは.preventDefaultを追加する前、もう1つは.preventDefaultを追加した後に同じスクリプトをコピーしたものです。 jQueryのは、初期に動作しますが、私は.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番目のスクリプトは失敗する。どうして? organizationalElementの値が既存のレコードの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私は私が変更された場合、それは正しく動作しますtaht指摘$(this).preventDefault(); to e.preventDefault();

$(this)オブジェクトにメソッドを添付したいと思っているのでしょうか?

答えて

31

あなたはpreventDefaultは、の値に、この要素をナビゲートページのデフォルトのアクションを防ぐことに注意してください、ないthis

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

だけで完全にするために、イベントオブジェクトにpreventDefaultを呼び出したいですたとえば、アンカーのhref属性(デフォルトのアクションが選択のフォーカスアウトのものか、偶数のものがあるかはわかりません)。 preventDefaultではありません。

バブリングが気になる場合は、jQueryイベントハンドラからfalseを返す必要があるということではなく、デフォルトのアクションを防止し、バブリングも防止します。

+0

ありがとうございました。私はpreventDefaultがバブリングからイベントを止めないことを知っていますが、私はバブリングをしたくないとは確信していません。おそらくjQueryスクリプト全体が機能しなくなったのでしょうか? – jg100309

+2

@ jg100309 - いいえ、元の問題は、イベントオブジェクトではなく、これでpreventDefaultを呼び出していたことでした。あなたのハンドラにイベントオブジェクトを渡して、私の答えのように* it *のpreventDefaultを呼び出してください。 –

+1

*サイドノート:2つの '' 'の間に' ''をエスケープする必要はありません。* – SeinopSys

8

機能はイベントに関連付けられています。あなたが呼び出しされなければならないことである:あなたのコメントに基づいて明確にする

e.preventDefault(); 

編集、あなたは関数呼び出しの変数としてeを追加する必要があります。

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

あなたはで詳細を読むことができますjQuery preventDefaultページを参照してください。

+0

さて、したがって、常にe.preventDefault()になります。 – jg100309

4

イベントオブジェクトには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 

はそれが助け場合、私に教えてください!

関連する問題