2012-08-31 64 views
0

可以使用change()事件檢查輸入是否爲未更改檢查輸入是否未更改

我正在與<input type='file' />一起工作,我想警告用戶他自己的行爲沒有改變。

現在,我只是做了正常change()事件:

// fire the thumbnail (img preview) 
$("#file-input").on("change", function() { 
    readURL(this); // create the thumbnail 
}); 

什麼,我缺少什麼?

上一個Solutuib:

好,我發現解決類似的問題,真正的問題是我給的一個選項,用戶隱藏的縮略圖,如果他想,再打開......

但縮略圖只會在用戶選擇圖像時打開,這是問題所在,因爲更改事件會激發此選項打開,所以如果沒有更改,則不會打開縮略圖。

因此,當我隱藏縮略圖時,我將input file更改爲新的縮略圖,從而使更改事件始終觸發。

+0

一個'文件input'價值是fakepath。你的文件輸入是否有默認值?怎麼樣? – undefined

+0

@undefined - 但它確實得到了文件名,所以可以比較它,只是與更改事件不同,當然不是路徑,因爲這只是「假路徑」等。 – adeneo

+0

@adeneo是的,它獲取文件名,問題是文件輸入如何具有默認值?當然,他希望在提交事件時檢查「文件輸入」,因此如果文件輸入的值爲空,他可以提醒某事。 – undefined

回答

5

使用一個變量來存儲輸入的最後一個值,並比較在改變事件的當前值,如果它們是相同的,沒有改動是:

var last_value = $("#file-input").val(); 

$("#file-input").on("change", function() { 
    if (this.value === last_value) alert('no change'); 
    last_value=this.value; 
}); 

編輯:或者,你可以隨時剛剛替換爲其他輸入標籤,這樣SO answer提示:

var $c = $("#container"); 
var $f1 = $("#container .f1"); 

function FChange() { 
    alert("f1 changed"); 

    $(this).remove(); 
    $("<input type='file' class='f1' />").change(FChange).appendTo($c); 
} 

$f1.change(FChange); 
+1

但不會更改事件不會觸發,如果它沒有改變?我可能會誤解這個問題......但我喜歡你的回答 – MrOBrian

+0

還沒有測試過,但你可能是對的!無論如何,這是我能想到的最好的? – adeneo

+0

我測試過了,你是對的,再次選擇相同的文件不會觸發更改事件。 – adeneo

1
<input type="file" id="file-input" data-url="intial-value" /> 

$("#file-input").on("change", function() { 
    if($(this).val() != $(this).data('url'){ 
     //value has changed 
     $(this).data('url', $(this).val()) 
    } 
    else{ 
     return false; 
    } 

}); 
0
$("#file-input").on("change", function() { 
    if($(this).data('last-val')){ 
     // do something 
    } else { 
     $(this).data('last-val',$(this).val()); 
     //do something else 
    } 
}); 
+0

不,如果沒有更改,更改事件不會觸發。 –