2012-04-03 9 views
4

confirm()メソッドの使用時に、フォームファイル入力要素がonclick DOMイベントによって変更されないようにするにはどうすればよいですか?JavaScript:ファイル入力onclickは、ユーザーがconfirm()をキャンセルした場合に変更を防止します

例では、ファイル入力要素の値を失わないようにするには、[キャンセル]をクリックすると尋ねてユーザーに通知します。キャンセルをクリックすると、ファイルダイアログウィンドウは表示されません。

XHTML

<input name="post_file" onclick="images_change();" type="file" value="" /> 

使用すると、1つのファイルの入力を持っている場合はJavaScript

function images_change() 
{ 
var answer = confirm('Okay or cancel, if you cancel no dialog window will be displayed.'); 

if (answer) 
{ 
    answer = true; 
    //previous item previews deleted here in a while loop. 
} 
else {answer = false;} 

return answer; 
} 
+0

O.k.あなたはほとんどそこにいます。ちょうど 'confirm'値を返してください、以下の私の答えを見てください。 – gdoron

+0

@ジョンあなたが現在求めているものより多くの答えを必要とするならば - "* [...]私は他のスクリプトを実行する必要があります。 。 –

+0

Colin、不要な空白を追加しないでください。 – John

答えて

2
document.getElementById('post_file').addEventListener('click',function(e) {images_click(e);},false); 

function images_click(e) 
{ 
    var answer = confirm('Ok or cancel?'); 

    if (answer) 
    { 
    //shows file selection dialog window. 
    } 
    else {e.preventDefault();} 
} 
} 
+1

e.preventDefault();便利でクールなsooooです。ありがとう。私は以前これを望んでいましたが、同様のSOの質問でそれを見つけられませんでした。 – goamn

3

はなぜそれをインライン化しませんか?

HTML:

<input name="post_file" onclick="return check()" type="file" value="" />​ 

はJavaScript:

function check() { 
    return confirm('Okay or cancel, if you cancel no dialog window will be displayed.'); 
}​ 

jsFiddle example

+0

なぜインラインスクリプトを使用するように彼に勧めますか? – gdoron

+0

関数だけを呼び出すことができますが、インラインスクリプトは、私が答えてくれればとってもかまいません。 – John

+0

ファイル入力からちょうど1つのみの場合は、何も問題ありません。彼がそれを再使用する必要があれば、私はそれを分ける際のポイントを見ることができます。 – j08691

0

あなたはconfirm結果を返すと、関数の結果を返す必要があります。

<input name="post_file" onclick=" return images_change();" type="file" value="" />​ 

function images_change() { 
    return confirm('Okay or cancel, if you cancel no dialog window will be displayed.'); 
} 

LIVE DEMO

+0

基本的にj08691と同じです。 –

+0

スクリプトがtrueを返す場合は問題があるようですが、それ以外のスクリプトを実行する必要があります。 – John

関連する問題