按文本设置所选选项并重置为默认选项

时间:2017-01-15 23:07:32

标签: javascript jquery

我有一个带有默认选项Select an option的html select元素,当我点击其他元素时,我试图更改它,例如:我有一个值为{{1}的按钮},如果我点击这个元素我想搜索我的选择选项上是否存在该文本,我使用包含 jQuery方法执行此操作并且似乎有效,问题是我可以有多个带有文字的元素,我不知道我的代码有什么问题,但似乎只是第一次工作。这是我的问题的一个例子:

  

两个按钮,我点击第一个按钮,工作正常,然后我点击第二个也工作,但然后我再次点击第一个不起作用!

另外,我想创建一个重置选项,为此我使用MyText select option但不起作用。

这是我的示例代码:



.prop('selectedIndex',  0)

$('.btn').click(function() {
  var value = $(this).val();
  $('#Sel option:contains(' + value + ')').attr("selected", true);

});

$('.btn2').click(function() {
  $('#Sel').prop('selectedIndex', 0);
});




PD:如果有一个选项可以通过点击输入类型=&#34来重置所有输入(选择,文本,数字等);重置"这可能是我的重置问题的解决方案,因为我也试过点击重置输入(window.MyForm.reset()),但我的最后一个选择的选项没有重置。

4 个答案:

答案 0 :(得分:2)

如果您检查文本并使用相同的功能更改public class songs_list extends Fragment { // Adapter that exposes data from a Cursor to a ListView widget. private songs_list.MediaCursorAdapter mediaAdapter = null; private String currentFile=""; private boolean isStarted = true; private TextView selelctedFile = null; private View v=null; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Use cursor to get data from external resource Cursor cursor = getActivity().getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null); // check Cursor has data or not if (null != cursor) { cursor.moveToFirst(); mediaAdapter = new MediaCursorAdapter(getActivity().getApplicationContext(), R.layout.list_layout, cursor); v=inflater.inflate(R.layout.fragment_songs_list, container, false); // TextView title = (TextView) view.findViewById(R.id.title); ListView lv = (ListView)v.findViewById(android.R.id.list); lv.setAdapter(mediaAdapter); } // Inflate the layout for this fragment return v; } MediaPlayer player = new MediaPlayer(); //MediaCursorAdapter class construction (what to show ) private class MediaCursorAdapter extends SimpleCursorAdapter { public MediaCursorAdapter(Context context, int layout, Cursor c) { super(context, layout, c, new String[]{MediaStore.Audio.Albums.ALBUM_ID, MediaStore.MediaColumns.TITLE, MediaStore.EXTRA_MEDIA_ARTIST, MediaStore.Audio.AudioColumns.DURATION}, new int[]{R.id.icon, R.id.title, R.id.artistname, R.id.duration}); } @RequiresApi(api = Build.VERSION_CODES.M) @Override public void bindView(View view, Context context, Cursor cursor) { TextView title = (TextView) view.findViewById(R.id.title); ImageView img = (ImageView) view.findViewById(R.id.icon); TextView name = (TextView) view.findViewById(R.id.artistname); TextView duration = (TextView) view.findViewById(R.id.duration); // icon long albumid = Long.parseLong((cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ID)))); Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart"); Uri uri = ContentUris.withAppendedId(sArtworkUri, albumid); ContentResolver res = context.getContentResolver(); InputStream in = null; try { in = res.openInputStream(uri); } catch (FileNotFoundException e) { e.printStackTrace(); } Bitmap artwork = BitmapFactory.decodeStream(in); img.setImageBitmap(artwork); title.setText(cursor.getString( cursor.getColumnIndex(MediaStore.MediaColumns.TITLE))); name.setText(cursor.getString( cursor.getColumnIndex(MediaStore.EXTRA_MEDIA_ARTIST))); long durationInMs = Long.parseLong(cursor.getString( cursor.getColumnIndex(MediaStore.Audio.AudioColumns.DURATION))); double durationInMin = ((double) durationInMs / 1000.0) / 60.0; durationInMin = new BigDecimal(Double.toString(durationInMin)).setScale(2, BigDecimal.ROUND_UP).doubleValue(); duration.setText("" + durationInMin); view.setTag(cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA))); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(context); View v = inflater.inflate(R.layout.list_layout, parent, false); bindView(v, context, cursor); return v; } } } 标记的值,则可以完美地执行您想要的操作。

select
$('.btn').click(function() {
  var val = $(this).val();
  $('#Sel option').each(function(index){
    if($(this).text() == val)
      $('#Sel').prop('selectedIndex', index);
  });
});

$('.btn2').click(function() {
  $('#Sel').prop('selectedIndex', 0);
});

答案 1 :(得分:1)

不是在选项中添加selected 属性,而是设置selected 属性。这会强制浏览器取消选择所有其他选定的选项(如果列表不是<select multiple>)。

$('.btn').click(function() {
  var value = $(this).val();
  $('#Sel option:contains(' + value + ')').prop("selected", true);
});

或者,您可以阅读index属性并在列表中设置selectedIndex,这是IMO更明确的行为。

$('.btn').click(function() {
  var value = $(this).val();
  var index = $('#Sel option:contains(' + value + ')').prop("index");
  $('#Sel').prop('selectedIndex', index);
});

此外,重置表单时,disabled第一个选项可能会在某些浏览器中造成问题。

答案 2 :(得分:0)

在按钮中使用实际值更简单,然后只需在选择

上使用val()
<button value="1" class="btn">Button 1</button>
<button value="2" class="btn">Button 2</button>
<button value="0" class="btn">Reset</button>

然后一个听众会为所有3个

工作
$('.btn').click(function() {      
  $('#Sel').val($(this).val());    
});

至于清除所有其他输入,只需将值设置为空字符串

$(':input').not('select').val('')

答案 3 :(得分:0)

不要对选项值感到困惑...并且设置选择器的值并不会留下任何杂散清理,你必须手动设置attrs。

DialogFragment