2012-08-10 68 views
0

不知道如何說出一個爲尷尬的標題抱歉。我有這個腳本來檢查文件擴展名,以確保它們是.mp3s。我只是爲了克服使用哪個選擇器來獲取文件的名稱。jquery選擇器使用(這)表單元素

例子:

<form name="uploadsong1" action="" enctype="multipart/form-data" method="post" onsubmit="return ExtensionsOkay();"> 
<input name="song1" type="file" accept="*.mp3" /> 
etc.. 

而且ExtensionsOkay首先抓住字段值....我知道是什麼問題...

var fieldvalue = $(this).$('input[type=file]').value; 

問題來自於一個事實,即我有多個形式與上傳。 uploadsong1,uploadsong2等的表單名稱...

因此,按照我的推理,我需要抓住「this」這是表單的名稱,然後是輸入文件。 (輸入名稱像表單名稱一樣增加1,2,3等)。

我知道我的語法必須是錯誤的抓取字段值...幫助..並且謝謝!

+1

你爲什麼不看看所有的jQuery功能,這很有趣相信我 – UnLoCo 2012-08-10 00:48:46

回答

1

如果你說你要調用多個形式相同ExtensionsOkay()功能,您應該使用jQuery,而不是一個內嵌onsubmit="..."屬性綁定。 (其實你應該避免在一般內嵌事件屬性。)

$("form").submit(ExtensionsOkay); 

然後,功能this內將指的是形式問題,所以你使用它的具體形式中得到字段的值是已提交。以下是兩種不同的方式中選擇this領域:

function ExensionsOkay(event) { 
    var fieldvalue = $(this).find('input[type=file]').val();  
    // or 
    var fieldvalue = $('input[type=file]', this).val(); 
    // and then if you want to prevent the form submitting: 
    event.preventDefault(); 
} 

當jQuery的調用你的函數,將作爲參數傳遞與提交事件相關聯的事件對象(也不要緊,你是什麼名稱的參數,但大多數人使用evente - 如果您不需要使用事件對象,則不必聲明參數)。

如果你不需要從任何地方其他調用此函數不是作爲提交處理程序,那麼你就不需要單獨定義它,它作爲一個處理程序相關聯,只是這樣做:

$("form").submit(function(e) { 
    var fieldvalue = $(this).find('input[type=file]').val(); 
    // etc 
    if (someCondition) 
     e.preventDefault(); 
}); 

請注意,通過$("form"),您將獲得頁面上的所有表單。要選擇其中一些給相關的班級,並說$("form.classNameHere")

+0

這完美的工作!我不得不通讀這幾遍,但現在我完全明白了。這實際上相當簡單,感謝您的佈局!謝謝! – PaulHanak 2012-08-11 01:22:56

2

嘗試

var fieldvalue = $(this).find('input[type=file]').val(); 
+0

嗯,我對這個有很高的期望!然而,它顯示爲fieldvalue「undefined」.... – PaulHanak 2012-08-10 01:09:21

+0

更新 - 在jQuery中沒有'value',只是'val()' – 2012-08-10 01:14:01

+0

再次感謝Zoltan的快速回復。但是,它似乎仍然存在問題。我仍然沒有定義。從邏輯上講,這一切似乎都是正確的!很奇怪.... – PaulHanak 2012-08-10 01:33:39